2017-04-19 58 views
4

我正在使用以下方法將圖像從Android上傳到服務器。在分段上傳請求中實現ProgressDialog

public void uploadMultipart() { 
     //getting name for the image 
     String name = editText.getText().toString().trim(); 

     //getting the actual path of the image 
     String path = getPath(filePath); 


     progress = ProgressDialog.show(this, "Subiendo imagen", 
       "Por favor, espere...", true); 
     //Uploading code 
     try { 
      String uploadId = UUID.randomUUID().toString(); 

      //Creating a multi part request 
      new MultipartUploadRequest(this, uploadId, Constants.UPLOAD_URL) 
        .addFileToUpload(path, "image") //Adding file 
        .addParameter("name", name) //Adding text parameter to the request 
        .setNotificationConfig(new UploadNotificationConfig()) 
        .setMaxRetries(2) 
        .startUpload(); //Starting the upload 


     } catch (Exception exc) { 
      Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 

    } 

現在我想實現一個ProgressDialog,當上傳結束時應該被解散。我不知道多部分請求何時結束。

謝謝

回答

3

有了這個類:

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(); 
     } 
    } 
} 

然後在您的活動:

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 
    } 

} 

現在你要在成功/失敗上傳解僱適當的回調。

​​

+0

謝謝,完美的作品和一個很大的教訓我。 – mvasco

+0

@override in SingleUploadBroadcastReceiver類顯示錯誤「方法不覆蓋超類中的方法」? – Sidhartha

+0

@Sidhartha,你在談論哪種方法? – azizbekian

2

這裏是樣品的方法,啓動進度上點擊對話框並關閉它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(); 
     } 
    } 
+1

謝謝你,我已經嘗試了azizbekian的答案,對我很好。 – mvasco

0
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(); 
    } 
} 

添加此代碼的Activity類

@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(); 
    } 
} 

實現SingleUploadBroadcastReceiver.Delegate你的活動,並宣佈像波紋管

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() { 

} 

這裏是SingleUploadBroadcastReceiver類

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(); 
    } 
} 
} 
相關問題