我想在我的應用上傳圖像時顯示ProgressDialog。 上傳圖片可能需要很長時間。 現在我有2個Asynctasks,一個用於將圖像上載到服務器,另一個用於發送電子郵件。發送電子郵件後,下一個意圖應該彈出。按下按鈕並繼續下一個意圖,ProgressDialog
這是我的下一個按鈕的代碼:
public void next(View view) {
Intent intent = new Intent(Step4.this, Step5.class);
intent.putExtra(EXTRA_MESSAGE, (Serializable) _user);
intent.putExtra(EXTRA_MESSAGE2, _isRepairable);
intent.putExtra(EXTRA_MESSAGE3, _injury);
intent.putExtra(EXTRA_MESSAGE4, _category);
intent.putExtra(EXTRA_MESSAGE5, _inch);
intent.putExtra(EXTRA_MESSAGE6, _size);
mailing(_isRepairable);
new UploadImageTask().execute();
startActivity(intent);
}
這是我UploadImageTask()
private class UploadImageTask extends AsyncTask<Void, Void, Integer> {
ProgressDialog dialog;
StopWatch sw = new StopWatch();
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(Step4.this);
dialog.show();
}
protected Integer doInBackground(Void... params) {
if (isPhotoTaken()) {
sw.start();
ImageUploader.uploadFile(getPhotoPath(),
"http://obo.nl/android-upload-image.php", Step4.this);
sw.stop();
Debug.out(sw.getTime());
}
return null;
}
protected void onPostExecute(Integer result) {
dialog.dismiss();
new MyAsyncTask().execute(_mail);
}
}
這是我MyAsyncTask
private class MyAsyncTask extends AsyncTask<Mail, Integer, Double> {
/**
* Private boolean to check if a tire is repairable or not.</br>
*/
boolean _repairable = Step4._isRepairable;
/**
* Private integer which counts how many times we've tried to send the
* Email.
*/
private int _counter = 0;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* Method used to start {@link #postData(Mail)} on a background thread.
*
* @return null
*/
@Override
protected Double doInBackground(Mail... params) {
postData(params[0]);
return null;
}
/**
* Method used to send the mail through a JSON Request in combination
* with the website. If there is no Internet connection the program will
* try to send the mail every 10 seconds.
*
* @param valueIWantToSend
*/
public void postData(Mail valueIWantToSend) {
if (AppStatus.haveNetworkConnection(_context)) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://obo.nl/android-mailing.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("from",
valueIWantToSend.getFrom()));
nameValuePairs.add(new BasicNameValuePair("to",
valueIWantToSend.getTo()));
nameValuePairs.add(new BasicNameValuePair("subject",
valueIWantToSend.getSubject()));
nameValuePairs.add(new BasicNameValuePair("message",
valueIWantToSend.getBody()));
nameValuePairs.add(new BasicNameValuePair("localized",
getResources().getConfiguration().locale
.getDisplayName()));
if (PathToPDF(_repairable).contains("Goed_Gekeurd_NL")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_BANDENANALYSE_GOED_GEKEURD_PATH));
} else if (PathToPDF(_repairable).contains("Afgekeurd_NL")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_BANDENANALYSE_AFGEKEURD_PATH));
} else if (PathToPDF(_repairable).contains(
"Goed_Gekeurd_FR")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_ANALYSEPNEUS_GOED_GEKEURD_PATH));
} else if (PathToPDF(_repairable).contains("Afgekeurd_FR")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_ANALYSEPNEUS_AFGEKEURD_PATH));
} else if (PathToPDF(_repairable).contains(
"Goed_Gekeurd_DE")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_REIFENANALYSE_GOED_GEKEURD_PATH));
} else if (PathToPDF(_repairable).contains("Afgekeurd_DE")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_REIFENANALYSE_AFGEKEURD_PATH));
} else if (PathToPDF(_repairable).contains(
"Goed_Gekeurd_EN")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_TYREANALYSE_GOED_GEKEURD_PATH));
} else if (PathToPDF(_repairable).contains("Afgekeurd_EN")) {
nameValuePairs.add(new BasicNameValuePair(
"outputResult",
SERVER_TYREANALYSE_AFGEKEURD_PATH));
}
if (isPhotoTaken()) {
nameValuePairs.add(new BasicNameValuePair("photo",
getPhotoPath()));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = httpclient.execute(httppost,
responseHandler);
// This is the response from a php application
String reverseString = response;
Log.i("info", reverseString);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
} else {
if (_counter == 0) {
_counter++;
_activity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(_context,
getString(R.string.noInternetEmailNotSend),
Toast.LENGTH_LONG).show();
}
});
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
postData(valueIWantToSend);
}
}
}
所以,我怎樣才能使它就像ProgressDialog在上傳時顯示的那樣(目前它在上傳時顯示幾秒鐘(比如3秒))在這裏15至20秒。 對話框應該持續整整20秒,而不是僅僅3秒。 另外,當對話框關閉時,它已經轉到下一個意圖。雖然它實際上應該在20秒而不是3秒內進入下一個意圖。
首先上傳你的圖像(異步任務1)在後期執行的異步任務1,你可以調用意圖(異步任務2 \)的郵件上傳?? – Subburaj
感謝它的工作! :) – Baklap4