使用StrictMode.ThreadPolicy将图像上载到服务器时不显示ProgressDialog

时间:2017-10-03 09:18:05

标签: java android progressdialog

ProgressDialog仅在我发送文字时显示,但是当我发送图片时,它给了我一个错误,告诉我有很多活动正在运行,或者应用无法处理所有活动,解决方案是在调用这些任务之前添加StrictMode.ThreadPolicy但问题是ProgressDialog不再显示哪个对于告诉用户正在进行的过程很重要。

我认为StrictMode.ThreadPolicy导致ProgressDialog消失。我没有使用Asynctask这就是为什么我还没有在互联网上找到解决方案,因为大多数人都在使用它。我也计划使用Asynctask,但我的老板不赞成,他担心会破坏应用程序。

{

     private void upLoadImage(String path){
    StrictMode.ThreadPolicy policy = new 
    StrictMode.ThreadPolicy.Builder().permitAll().penaltyDialog().build();
    StrictMode.setThreadPolicy(policy);
    uploadMedia(path);}}

{

    private void uploadMedia(String path) {
    String ImageName = "image_name";
    String ImagePath = "image_path";

  try {
    String charset = "UTF-8";
    File uploadFile1 = new File(path);
    String requestURL= "http://myurl";
    MultipartUtility multipart = new MultipartUtility(requestURL,   

 charset);
 multipart.addFormField(ImageName, "iName");
 multipart.addFormField(ImagePath, "iPath");
 multipart.addFilePart("uploadedfile", uploadFile1);
 List<String> response = multipart.finish();
  Log.v("rht", "SERVER REPLIED:");
 for (String line : response) {
      Log.v("rht", "Line : "+line);
       if(line=="true"||line=="Saved"){
                progressDialog.dismiss();
       }
   }

       // Toast.makeText(this, ""+response, Toast.LENGTH_SHORT).show();
        finish();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

1 个答案:

答案 0 :(得分:0)

如果您在UI线程中访问网络,则会显示错误。您无法在主线程中执行网络操作。最好使用工作线程或ayntask。但是如果你愿意接受后果,并且必须在主线程上进行网络操作,你可以覆盖默认行为:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);