如何解决android.os.NetworkOnMainThreadException?
这个问题在这里已经有了答案:
Android操作系统不允许繁重的进程在主线程/ UI线程中执行,因为应用程序会减慢速度,降低性能并且应用程序会滞后。
但是,您可以在AsyncTask中执行它,如下所示。 在doInBackground
的doInBackground中执行你的进程/调用你的函数。
private class Download extends AsyncTask<String, Void, String> {
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d("Hi", "Download Commencing");
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Downloading Database...");
String message= "Executing Process";
SpannableString ss2 = new SpannableString(message);
ss2.setSpan(new RelativeSizeSpan(2f), 0, ss2.length(), 0);
ss2.setSpan(new ForegroundColorSpan(Color.BLACK), 0, ss2.length(), 0);
pDialog.setMessage(ss2);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
//INSERT YOUR FUNCTION CALL HERE
return "Executed!";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("Hi", "Done Downloading.");
pDialog.dismiss();
}
}
并将其称为: new Download().execute("");
从另一个功能。
您可以取消进度对话框。 我个人喜欢它,因为我知道我的过程将在用户可以做任何事情之前完成(如数据加载),确保用户与程序进行交互时不会发生错误。
将此代码用于活动
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
链接地址: http://www.djcxy.com/p/29541.html
上一篇: How to resolve android.os.NetworkOnMainThreadException?