У меня есть класс диалога прогресса, который является подклассом моей основной деятельности. Что само по себе работает нормально.
public class UpdateFeedTask extends AsyncTask<Void, Void, Void> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
loading = ProgressDialog.show(NewsFeedActivity.this,"Please wait...", "Retrieving data ...", true);
}
@Override
protected void onProgressUpdate(Void... progress) {
}
@Override
protected void onPostExecute(Void result) {
loading.dismiss();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
}
У меня есть метод getNews, который отправляет http-запрос и анализирует результат, это занимает несколько секунд. В этом методе я вызываю UpdateFeedTask для асинхронного отображения диалогового окна хода выполнения, но, похоже, оно не делает это одновременно. Кажется, что диалоговое окно хода выполнения открывается только после завершения http-запроса, поэтому вместо отображения диалогового окна хода выполнения и отправки запроса сначала отображается метод getNews, а затем на короткое время отображается диалоговое окно выполнения в течение доли секунды. Как сделать так, чтобы диалоговое окно отображалось до получения данных? Вот как я называю диалог прогресса
public void getNews(){
//show the progress dialog
new UpdateFeedTask().execute();
//go fetch some data
WheruClient newsFeedLocation = new WheruClient();
try {
newsFeedArray = newsFeedLocation.getLocationActivity(sessionKey,page,filter,when);
}catch (ClientProtocolException e) {
Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_LONG).show();
}catch (JSONException e) {
Toast.makeText(getApplicationContext(),e.getMessage(), Toast.LENGTH_LONG).show();
}
}
** РЕДАКТИРОВАТЬ новый асинхронный класс отправляет http-запрос в фоновом режиме и возвращает массив json, но я получаю фатальную ошибку, которая читает
04-07 15: 33: 02.967: ОШИБКА / AndroidRuntime (11004): вызвано: java.lang.RuntimeException: невозможно создать обработчик внутри потока, который не вызвал Looper.prepare ()
Я читаю ваши примеры, и мне кажется, что я что-то упускаю из-за работы в фоновом режиме, есть мысли?
public class UpdateFeedTask extends AsyncTask<Void, Void, JSONArray> {
@Override
protected void onPreExecute() {
//loading = ProgressDialog.show(NewsFeedActivity.this,"Please wait...", "Retrieving data ...", true);
}
@Override
protected void onProgressUpdate(Void... progress) {
}
@Override
protected void onPostExecute(JSONArray result) {
//loading.dismiss();
updateFeed(result);
}
@Override
protected JSONArray doInBackground(Void... params) {
WheruClient newsFeedLocation = new WheruClient();
try {
newsFeedArray = newsFeedLocation.getLocationActivity(sessionKey,page,filter,when);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newsFeedArray;
}
}