Вот мой класс AsyncTask:
private class Task extends AsyncTask<Void, Integer, Void> {
@Override protected void onPreExecute() {
dia = new ProgressDialog(pictures.this);
dia.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dia.setMessage("Please wait while content is loaded...");
dia.setCancelable(false);
dia.show();
}
@Override protected Void doInBackground(Void... voids) {
Thread thread = new Thread(null, uploader, "MagentoBackground");
thread.start();
//publishProgress(100); keep this commented or no?
return null;
}
@Override public void onProgressUpdate(Integer... prog) {
if (prog == null)
return;
dia.setProgress(prog[0]);
}
@Override protected void onPostExecute(Void voids) {
dia.setMessage("Done");
dia.cancel();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
Есть одна большая и одна небольшая проблема, с которой я сейчас сталкиваюсь. Вот основные и второстепенные проблемы, последовательно:
Цель этого приложения - сделать снимок и загрузить его на веб-сайт. Как только пользователь нажимает кнопку «ОК» для загрузки, появляется диалоговое окно AsyncTask, так что это нормально. Тем не менее, он показывает диалоговое окно только на долю секунды, уже завершено на 100%, а затем принудительно закрывается. Тем не менее, это, безусловно, не на 100%! Когда я смотрю на сайт и обновляю страницу, он не показывает картинку. (В Wi-Fi изображение действительно загружается практически сразу, а когда веб-сайт обновляется сразу же, оно показывает новое изображение. Но в 3G этот процесс может занять несколько минут - вот почему я хочу, чтобы пользователь видел ход выполнения загружаемое фото).
Я не уверен, как использовать onProgressUpdate
. Я пробовал несколько уроков, но безрезультатно. Если кто-то может заявить, что я могу сделать для этой ситуации, это будет полезно
Edit:
Runnable
код:
private Runnable uploader = new Runnable() {
@Override
public void run() {
/**JER 3**/
if (teacherInfo != null)
teacher = " - " + teacherInfo ;
else teacher = "" ;
if (schoolInfo != null )
school = " - " + schoolInfo ;
else school = "" ;
/********/
if(Descriptor.desString.equals("")) Descriptor.desString = "No description provided.";
int sessionId = rapi.createSession(experimentInput.getText().toString(),
name.getText().toString() + teacher + school + " - " + time,
Descriptor.desString, "n/a", "Lowell, MA", "");
JSONArray dataJSON = new JSONArray();
JSONArray subData = new JSONArray();
try {
subData.put(curTime); subData.put(Lat); subData.put(Long); subData.put(Descriptor.desString);
dataJSON.put(subData);
}
catch (JSONException e) {
e.printStackTrace();
}
Boolean result = rapi.updateSessionData(sessionId, experimentInput.getText().toString(), dataJSON);
if (result) {
rapi.uploadPictureToSession(picture, experimentInput.getText().toString(),
sessionId, name.getText().toString() + teacher + school + " - " + time,
name.getText().toString() + Descriptor.desString);
}
//if (m_ProgressDialog != null && m_ProgressDialog.isShowing()) m_ProgressDialog.dismiss();
}
};