如何解决android.os.NetworkOnMainThreadException?

这个问题在这里已经有了答案:

  • 我该如何解决android.os.NetworkOnMainThreadException? 49个答案

  • 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?

    下一篇: HTTP Response in Android