我有一个进度对话框类,它是我的主要活动的子类。这本身运行良好。
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 post 请求并解析结果,这需要几秒钟。在此方法中,我调用 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;
}
}