1
私は自分のサーバーに画像をアップロードするAsyncTaskを持っています。この部分はうまくいきますが、中断する処理をどのように処理するのか分かりません。私はキャンセル可能なProgressDialogとキャンセル時のリスナーを持っています。このリスナーでは、httpリクエストとAsyncTaskを中止します...しかし、イメージがまだアップロードされているので、それは十分ではないようです。ここ は私のコードがどのように見えるかです:サーバー上の画像のアップロードを中止する
public class UploadCubeThread extends AsyncTask<Cube, Void, String> {
private static final String url = "http://www.mywebsite.com/upload_cube.php";
private volatile HttpPost httppost = new HttpPost(url);
private ProgressDialog waitSpinner;
private Context context;
private HashMap<String, Integer> feedback;
private boolean success = false;
public UploadCubeThread(Context context) {
this.context = context;
this.feedback = new HashMap<String, Integer>();
waitSpinner = new ProgressDialog(context);
// Cancelable
waitSpinner.setCancelable(true);
waitSpinner.setCanceledOnTouchOutside(false);
waitSpinner.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
httppost.abort();
UploadCubeThread.this.cancel(true);
}
});
}
@Override
protected void onCancelled() {
super.onCancelled();
success = false;
feedback.put("cancelled", 0);
((UploadListener) context).onUploadComplete(success, feedback);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
waitSpinner.setMessage(context.getString(R.string.uploading));
waitSpinner.show();
}
@Override
protected String doInBackground(Cube... arg0) {
Cube cube = arg0[0];
String result = null;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// Compression
cube.getImage().compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byte_arr = stream.toByteArray();
String image_str = Base64.encodeBytes(byte_arr);
ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
// Hash md5 pour l'intégrité
String hash = CubeUploader.encode(image_str);
nameValuePairs.add(new BasicNameValuePair("image", image_str));
nameValuePairs.add(new BasicNameValuePair("id_building", String
.valueOf(cube.getId_building())));
nameValuePairs.add(new BasicNameValuePair("title", cube.getTitle()));
nameValuePairs
.add(new BasicNameValuePair("content", cube.getContent()));
nameValuePairs.add(new BasicNameValuePair("hash", hash));
try {
HttpClient httpclient = new DefaultHttpClient();
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,
HTTP.UTF_8));
HttpResponse response = httpclient.execute(httppost);
// Utilisation de la réponse
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
result = reader.readLine();
} catch (UnknownHostException he) {
Log.e("CubeUpload", "Unknown Host : problem of connectivity ?");
result = "host_pb";
} catch (Exception e) {
Log.e("CubeUpload", "Error during upload: " + e.toString());
}
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//Some process
((UploadListener) context).onUploadComplete(success, feedback);
waitSpinner.dismiss();
}
}
はあなたの助けのためにありがとうございました!
私は同じ問題に直面している! ...あなたはこれに対する解決策を見つけることができましたか? – Shatazone
yeah me 2解決策を見つけたら同じ問題があります –