【问题标题】:My ProgressDialog is Not Disappearing我的 ProgressDialog 没有消失
【发布时间】:2017-01-12 19:51:13
【问题描述】:

我正在 android 中使用文件选择器将文件上传到服务器的项目但是有一个问题,当我上传超过 500 kB 的文件时。该文件已上传,但我的进度对话框没有消失,如果我上传了 100 KB 的文件,它已上传到服务器,并且我成功上传了一个消息文件。但如果我上传超过 500 kB 的文件,我将无法获得服务器响应。请帮我。谢谢。

这是我的 UploadFile() 方法

private void uploadFile() {
        dialog = ProgressDialog.show(getActivity(), "", "Uploading File...", true);


        // Map is used to multipart the file using okhttp3.RequestBody
        Map<String, RequestBody> map = new HashMap<>();
        long maxLength = 10000000;
        File file = new File(selectedFilePath);
        if(file.length() > maxLength){
            Toast.makeText(getActivity(), "can't upload file if size more than 10mb", Toast.LENGTH_LONG).show();
            dialog.dismiss();

        }else {
            String name = tv_name.getText().toString();
            String email = tv_email.getText().toString();
            // Parsing any Media type file
            RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), file);
            RequestBody requestBody1 = RequestBody.create(MediaType.parse("text/plain"), name);
            RequestBody requestBody2 = RequestBody.create(MediaType.parse("text/plain"), email);
            map.put("file\"; filename=\"" + selectedFilePath + "\"", requestBody);
            map.put("name\"; username=\"" + name + "\"", requestBody1);
            map.put("email\"; email=\"" + email + "\"", requestBody2);

            ApiConfig getResponse = AppConfig.getRetrofit().create(ApiConfig.class);
            Call<ServerResponse> call = getResponse.upload("token", map);
            call.enqueue(new Callback<ServerResponse>() {
                @Override
                public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
                    ServerResponse serverResponse = response.body();
                    if (serverResponse != null) {
                        if (serverResponse.getSuccess()) {
                            Toast.makeText(getActivity(), serverResponse.getMessage(), Toast.LENGTH_SHORT).show();

                        } else {
                            Toast.makeText(getActivity(), serverResponse.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    } else {
//                    Log.v("Response", serverResponse.toString());
                    }
                    dialog.dismiss();
                    goToProfile();


                }

                @Override
                public void onFailure(Call<ServerResponse> call, Throwable t) {

                }
            });
        }
    }

【问题讨论】:

  • 您的onFailure 为空,请添加t.printStackTrace() 以查看最新情况
  • onFailure.中添加dialog.dismiss();方法
  • 我已经添加了那一行 The File is Uploaded to server after it dialog is dismiss() 但用户如何知道他们文件已上传???
  • 我已经进入了我的 android studio 。原因:java.net.SocketException: Socket closed

标签: android retrofit retrofit2


【解决方案1】:

收到回复后,您必须关闭进度对话框。 示例:

 if (cls_networlconnection.isOnline())
    {
        progressdialog = ProgressDialog.showdialog(this,"Loading");
        APICall();

    }
    else {
        Toast.makeText(getApplicationContext(),UserToastMessage.NETWORKCONNECTION, Toast.LENGTH_LONG).show();
        callNoconnection();
    }

    API Call Success()
    {
       if(progressDialog.isShowing)

         progressDialog.dismiss();

        //your logic

     } 

【讨论】:

    【解决方案2】:

    更新您的 onFailure 代码:

     @Override
     public void onFailure(Call<ServerResponse> call, Throwable t) {
        dialog.dismiss();
     }
    

    同样在 onResponse 中,首先你需要关闭对话框:

       @Override
       public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
           if(progressDialog.isShowing){
             dialog.dismiss();
           }
           ServerResponse serverResponse = response.body();
           if (serverResponse != null) {
               if (serverResponse.getSuccess()) {
                   Toast.makeText(getActivity(), serverResponse.getMessage(), Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity(), serverResponse.getMessage(), Toast.LENGTH_SHORT).show();
                }
            } else {
    //         Log.v("Response", serverResponse.toString());
            }
    
            goToProfile();
    
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      相关资源
      最近更新 更多