我想从远程数据库中获取一些数据,并且在我的活动的AsyncTask子类中有一些网络,但是当我尝试加载我的程序时,它显示了NetworkOnMainThreadException.
这是我的代码:
public class MyMapLocationActivity extends MapActivity {
private MapView mapView;
private static String url_product_details = "http://myurl.com/readfromdb";
private static final String TAG_SUCCESS = "success";
private static final String TAG_LATITUDE = "latitude";
private static final String TAG_LONGITUDE = "longitude";
private static final String TAG_POINT = "point";
JSONParser jsonParser = new JSONParser();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
ReadLocations Read = new ReadLocations();
Read.execute();
}
//And my networking AsyncTask:
class ReadLocations extends AsyncTask<String, String, String> { …Run Code Online (Sandbox Code Playgroud) 我工作的基于WiFi聊天引擎,我能够通过跟随着检索连接到当前的wifi网络主机列表这个链接现在得到了与IP地址的设备列表中,但我需要从IP地址的主机名和尝试以下
InetAddress inetAddr;
try {
inetAddr = InetAddress.getByName(host.hostname);
String hostname = inetAddr.getHostName();
String canonicalHostname = inetAddr.getCanonicalHostName();
holder.computerName.setText("Canonical : "+host.hostname);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这里主机名和规范主机名都显示ip地址而不是主机名.
请帮我解决这个问题.
以下是android代码片段
\n\nrunOnUiThread(new Runnable() {\n public void run() {\n AlertDialog alertDialog;\n alertDialog = new AlertDialog.Builder(MainActivity.this).create();\n alertDialog.setTitle("Network error");\n alertDialog.setMessage("Disconnected");\n alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "ok", new DialogInterface.OnClickListener() {\n /** ON clicking oKay button **/\n public void onClick(DialogInterface dialog, int id)\n {\n\n hasConnectServiceStarted = false;\n IP = null;\n// Intent intent = getIntent();\n Intent intentSplash = new Intent(getApplication().getApplicationContext(), SplashActivity.class);\n\n /** Shutdown the nodemain executor service if\n * HOST goes down\n */\n nodeMainExecutorService.forceShutdown();\n /** and restart the Main Activity that will prompt\n * user to reconnect to the …Run Code Online (Sandbox Code Playgroud) 我正在尝试将从相机或图库拍摄的图像上传到 php 服务器。为此,我正在使用库Fast-Android-Networking
使用我的代码,我可以看到文件正在写入服务器,但是,它保存为0 B,该onProgress函数也正在注销写入的正确字节。
这有什么帮助吗?如何使用此库将从相机或图库拍摄的文件正确传递到服务器?
private File mFileTemp;
btn_update.setOnClickListener(new OnClickListener() {
// Start new list activity
public void onClick(View v) {
uploadFileNew(pref.getString("user_id", null));
}
});
public void uploadFileNew(String frm_iduser) {
String uploadUrl = "https://plus.example.com/apps/mobile/registered_users/uploadProfilePicAndroid.php?fileName=" + frm_iduser + ".png";
AndroidNetworking.upload(uploadUrl)
.addMultipartFile("image",mFileTemp)
.addMultipartParameter("key","value")
.setTag("uploadTest")
.setPriority(Priority.HIGH)
.build()
.setUploadProgressListener(new UploadProgressListener() {
@Override
public void onProgress(long bytesUploaded, long totalBytes) {
// do anything with progress
Log.d("responce_app",String.valueOf(bytesUploaded));
}
})
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
// do …Run Code Online (Sandbox Code Playgroud) 我试图找出处理改造响应的最佳实践是什么。
我提供这样的改造单例:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(AuthInterceptor())
.addInterceptor(httpLoggingInterceptor)
.build()
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(CoroutinesResponseCallAdapterFactory())
.build()
val service = retrofit.create(ShowsService::class.java)
Run Code Online (Sandbox Code Playgroud)
服务接口是这样的:
interface ShowsService {
@GET("popular")
suspend fun fetchPopularShows(): Response<PopularShows>
}
Run Code Online (Sandbox Code Playgroud)
我从 API 获取节目列表,并在存储库中解析它,如下所示:
override suspend fun getShows(): Result<List<Show>?> {
val shows = service.fetchPopularShows()
val body = shows.body()
val errorBody = shows.errorBody()
return when {
body != null -> {
Result.Success(body.shows)
}
errorBody != null -> {
Result.Error(Exception(errorBody.string()))
}
else -> {
Result.Error(Exception("Unknown error: ${shows.raw().message}"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这感觉非常非 …
android android-networking kotlin retrofit kotlin-coroutines
作为Android开发人员,我是否负责处理用户快速重复地按下按钮的情况?或者这被认为是用户滥用?从后端的数据角度来看,没有什么不好的事情发生.
我有一个按钮,选择后进行服务器调用.一旦服务器响应,就会从返回的消息中生成一个活动(使用处理程序).在某些情况下,如果用户反复地混淆按钮,重复的活动可以开始堆叠并且可能导致糟糕的用户体验(即,用户可能需要多次点击后退按钮才能返回到前一个屏幕)
编辑:我遗漏了一些细节.现在正在等待服务器响应时显示一个微调器对话框.这会拦截所有点击.问题在于,在某些情况下,解雇微调器和启动新活动之间的时间足够长,以便用户进行更多点击.
现在我正在禁用按钮,但似乎有点黑客可能有更好的解决方案.
我想使用蜂窝数据下载文件。下载文件时似乎没有指定网络连接的API,所以我试图在下载前禁用Wi-Fi。
好像可以用这个setWifiEnabled方法,但是文档没有提到是否阻塞。我假设它不是。然后,我必须等到 Wi-Fi 被禁用才能继续下一行。
val wifiManager = this.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
wifiManager.isWifiEnabled = false
(how to wait here until the system finishes disabling Wi-Fi?)
downloadFile()
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法?