Implementing ProgressDialog in Multipart Upload Request

前端 未结 3 741
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-02 18:15

I am using following method to upload an image from Android to server.

 public void uploadMultipart() {
        //getting name for the image
        String n         


        
相关标签:
3条回答
  • 2021-01-02 18:51

    Here is the sample method, Start the progress dialog on click and close it on onCompleted

    public void uploadMultipart() {
    
            try {
                String path = getPath(filePath);
                final File file = new File(path);
                final String namFile = file.getName();
                final String ext = getMimeType(path);
    
                Toast.makeText(this, "Uploading file. Please wait...", Toast.LENGTH_SHORT).show();
                final String uploadId = UUID.randomUUID().toString();
                //Creating a multi part request
    
                String boundary = "---------------------------14737809831466499882746641449";
                new MultipartUploadRequest(this, uploadId, UPLOAD_URL)
                                            .addHeader("Content-Type", "multipart/form-data; boundary="+boundary)
                                            .addFileToUpload(path, "image") //Adding file
                                            .setNotificationConfig(new UploadNotificationConfig())
                                            .setMaxRetries(2)
                        .setDelegate(new UploadStatusDelegate() {
                            @Override
                            public void onProgress(Context context, UploadInfo uploadInfo) {
                                // your code here
                                Log.d("On Progress", String.valueOf(uploadInfo));
                            }
    
                            @Override
                            public void onError(Context context, UploadInfo uploadInfo, Exception exception) {
                                // your code here
                                Log.d("On error", String.valueOf(exception));
                            }
    
                            @Override
                            public void onCompleted(Context context, UploadInfo uploadInfo, ServerResponse serverResponse) {
    
                                // YourClass obj = new Gson().fromJson(serverResponse.getBodyAsString(), YourClass.class);
                                Log.d("serverResponse", String.valueOf(serverResponse));
    
                            }
    
                            @Override
                            public void onCancelled(Context context, UploadInfo uploadInfo) {
                                // your code here
                                Log.d("On cancled", String.valueOf(uploadInfo));
                            }
                        })
                        .startUpload();
    
            } catch (Exception exc) {
               // Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
                Toast.makeText(this, "Error While uploading...", Toast.LENGTH_SHORT).show();
            }
        }
    
    0 讨论(0)
  • 2021-01-02 19:00

    Having this class:

    public class SingleUploadBroadcastReceiver extends UploadServiceBroadcastReceiver {
    
        public interface Delegate {
            void onProgress(int progress);
            void onProgress(long uploadedBytes, long totalBytes);
            void onError(Exception exception);
            void onCompleted(int serverResponseCode, byte[] serverResponseBody);
            void onCancelled();
        }
    
        private String mUploadID;
        private Delegate mDelegate;
    
        public void setUploadID(String uploadID) {
            mUploadID = uploadID;
        }
    
        public void setDelegate(Delegate delegate) {
            mDelegate = delegate;
        }
    
        @Override
        public void onProgress(String uploadId, int progress) {
            if (uploadId.equals(mUploadID) && mDelegate != null) {
                mDelegate.onProgress(progress);
            }
        }
    
        @Override
        public void onProgress(String uploadId, long uploadedBytes, long totalBytes) {
            if (uploadId.equals(mUploadID) && mDelegate != null) {
                mDelegate.onProgress(uploadedBytes, totalBytes);
            }
        }
    
        @Override
        public void onError(String uploadId, Exception exception) {
            if (uploadId.equals(mUploadID) && mDelegate != null) {
                mDelegate.onError(exception);
            }
        }
    
        @Override
        public void onCompleted(String uploadId, int serverResponseCode, byte[] serverResponseBody) {
            if (uploadId.equals(mUploadID) && mDelegate != null) {
                mDelegate.onCompleted(serverResponseCode, serverResponseBody);
            }
        }
    
        @Override
        public void onCancelled(String uploadId) {
            if (uploadId.equals(mUploadID) && mDelegate != null) {
                mDelegate.onCancelled();
            }
        }
    }
    

    Then in your activity:

    public class YourActivity extends Activity implements SingleUploadBroadcastReceiver.Delegate {
    
        private static final String TAG = "AndroidUploadService";
    
        private final SingleUploadBroadcastReceiver uploadReceiver =
            new SingleUploadBroadcastReceiver();
    
        @Override
        protected void onResume() {
            super.onResume();
            uploadReceiver.register(this);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            uploadReceiver.unregister(this);
        }
    
        public void uploadMultipart(final Context context) {
            try {
                String uploadId = UUID.randomUUID().toString();
                uploadReceiver.setDelegate(this);
                uploadReceiver.setUploadID(uploadId);
    
                new MultipartUploadRequest(context, uploadId, "http://upload.server.com/path")
                    .addFileToUpload("/absolute/path/to/your/file", "your-param-name")
                    .setNotificationConfig(new UploadNotificationConfig())
                    .setMaxRetries(2)
                    .startUpload();
    
            } catch (Exception exc) {
                Log.e(TAG, exc.getMessage(), exc);
            }
        }
    
        @Override
        public void onProgress(int progress) {
            //your implementation
        }
    
        @Override
        public void onProgress(long uploadedBytes, long totalBytes) {
            //your implementation
        }
    
        @Override
        public void onError(Exception exception) {
            //your implementation
        }
    
        @Override
        public void onCompleted(int serverResponseCode, byte[] serverResponseBody) {
            //your implementation
        }
    
        @Override
        public void onCancelled() {
            //your implementation
        }
    
    }
    

    Now you'll have appropriate callbacks fired upon successful/unsuccessful upload.

    source

    0 讨论(0)
  • 2021-01-02 19:06
    public void upload_file_multipart() {
    
        String url = " http://server.printme.uz/v1/order/make-order";
    
        try {
            String uploadId = UUID.randomUUID().toString();
            uploadReceiver.setDelegate((SingleUploadBroadcastReceiver.Delegate) this);
            uploadReceiver.setUploadID(uploadId);
    
            //Creating a multi part request
            MultipartUploadRequest request = new MultipartUploadRequest(this, uploadId, UPLOAD_URL);
            request.addFileToUpload(images.getPath(), "url");
            request.setMaxRetries(2);
            request.startUpload(); //Starting the upload
    
        } catch (Exception exc) {
            Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    

    Add this code your Activity class

    @Override
    public void onClick(View v) {
    
        if (v.getId() == R.id.btn_id) {
            upload_file_multipart();
    
            dialog = new ProgressDialog(this);
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMessage("Uploading photo, please wait.");
            dialog.setMax(100);
            dialog.setCancelable(true);
            dialog.show();
        }
    }
    

    implements SingleUploadBroadcastReceiver.Delegate to your Activity and declare like bellow

    public class YourActivity extends AppCompatActivity implements SingleUploadBroadcastReceiver.Delegate {
    
    private final SingleUploadBroadcastReceiver uploadReceiver =
            new SingleUploadBroadcastReceiver();
    ProgressDialog dialog;
    
    @Override
    protected void onResume() {
        super.onResume();
        uploadReceiver.register(this);
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        uploadReceiver.unregister(this);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_images);
    
        //your codes
    }
    
    @Override
    public void onProgress(int progress) {
        Log.d("PROGRESS", "progress = " + progress);
        dialog.setProgress(progress);
    }
    
    @Override
    public void onProgress(long uploadedBytes, long totalBytes) {
    
    }
    
    @Override
    public void onError(Exception exception) {
    
    }
    
    @Override
    public void onCompleted(int serverResponseCode, byte[] serverResponseBody) {
        dialog.dismiss();
    }
    
    @Override
    public void onCancelled() {
    
    }
    

    Here is SingleUploadBroadcastReceiver class

    import net.gotev.uploadservice.UploadServiceBroadcastReceiver;
    
    public class SingleUploadBroadcastReceiver extends UploadServiceBroadcastReceiver {
    
    public interface Delegate {
        void onProgress(int progress);
        void onProgress(long uploadedBytes, long totalBytes);
        void onError(Exception exception);
        void onCompleted(int serverResponseCode, byte[] serverResponseBody);
        void onCancelled();
    }
    
    private String mUploadID;
    private Delegate mDelegate;
    
    public void setUploadID(String uploadID) {
        mUploadID = uploadID;
    }
    
    public void setDelegate(Delegate delegate) {
        mDelegate = delegate;
    }
    
    @Override
    public void onProgress(String uploadId, int progress) {
        if (uploadId.equals(mUploadID) && mDelegate != null) {
            mDelegate.onProgress(progress);
        }
    }
    
    @Override
    public void onProgress(String uploadId, long uploadedBytes, long totalBytes) {
        if (uploadId.equals(mUploadID) && mDelegate != null) {
            mDelegate.onProgress(uploadedBytes, totalBytes);
        }
    }
    
    @Override
    public void onError(String uploadId, Exception exception) {
        if (uploadId.equals(mUploadID) && mDelegate != null) {
            mDelegate.onError(exception);
        }
    }
    
    @Override
    public void onCompleted(String uploadId, int serverResponseCode, byte[] serverResponseBody) {
        if (uploadId.equals(mUploadID) && mDelegate != null) {
            mDelegate.onCompleted(serverResponseCode, serverResponseBody);
        }
    }
    
    @Override
    public void onCancelled(String uploadId) {
        if (uploadId.equals(mUploadID) && mDelegate != null) {
            mDelegate.onCancelled();
        }
    }
    }
    
    0 讨论(0)
提交回复
热议问题