我正在使用以下方法将图片从Android上传到服务器。
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。我不知道多部分请求何时结束。
谢谢
答案 0 :(得分:9)
有这个课程:
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
}
}
现在,您在上传成功/失败后会触发适当的回调。
答案 1 :(得分:3)
以下是示例方法,点击后启动进度对话框并在 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();
}
}
答案 2 :(得分: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实现到您的Activity并声明如下:
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();
}
}
}