问题描述
你好
我正在从用户帐户加载推文以显示在列表视图中。现在,我想让用户知道他们正在等待的过程。我已经实现了异步任务,但是由于某种原因,从未调用过onPostExcecute。这就是为什么对话框永远不会被删除的原因。
有人可以给我一个提示吗。我在做什么错?
如果需要,我可以发布我的TweetAdapterClass
这是我的Asyncclass
public class Progresstask extends AsyncTask<Void,Void,Void> {
@Override
protected void onPreExecute() {
dialog.setTitle(\"Even geduld...\");
dialog.setMessage(\"De tweets worden ingeladen...\");
dialog.show();
}
protected void onPostExecute() {
try {
if (dialog.isShowing()) {
adaptor = new TweetListAdaptor(MainActivity.this,R.layout.tweetitem,loadTweets());
setlistadapter(adaptor);
dialog.dismiss();
}
} catch (Exception e) {
}
}
@Override
protected Void doInBackground(Void... arg0) {
return null;
}
}
LoadTweets看起来像这样:
private ArrayList<Tweets> loadTweets() {
ArrayList<Tweets> tweets = new ArrayList<Tweets>();
try {
HttpClient hc = new DefaultHttpClient();
HttpGet get = new HttpGet(
\"http://search.twitter.com/search.json?q=JobXXL_be&rpp=10\");
// HttpGet get = new
// HttpGet(\"http://search.twitter.com/search.json?q=Stijn_messiaen&rp=10\");
HttpResponse rp = hc.execute(get);
if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(rp.getEntity());
JSONObject root = new JSONObject(result);
JSONArray sessions = root.getJSONArray(\"results\");
for (int i = 0; i < sessions.length(); i++) {
JSONObject session = sessions.getJSONObject(i);
Tweets tweet = new Tweets();
tweet.setTweet(session.getString(\"text\"));
tweet.setUser(session.getString(\"from_user\"));
// datum vertalen
String date = session.getString(\"created_at\").substring(5,16);
String[] arrDate = date.split(\" \");
int id = this.getResources().getIdentifier(
arrDate[1].toString(),\"string\",this.getPackageName());
String maand = getResources().getString(id);
date = arrDate[0].toString() + \" \" + maand + \" \"
+ arrDate[2].toString();
tweet.setDate(date);
tweets.add(tweet);
}
}
} catch (Exception e) {
Log.e(\"TwitterFeedActivity\",\"Error loading JSON\",e);
}
return tweets;
}
编辑:我在我的doInBackgroundMethod
中添加了我的LoadTweets(),这解决了我的问题!
解决方法
尝试在您的AsyncTask类所在的主类中声明
ProgressDialog dialog
,并且仅在AsyncTask类中调用dialog.show
和dialog.dismiss
方法。
,在活动中使用onCreateDialog(int id)
创建ProgressDialog
。在AsyncTask调用中:
MainActivity.this.showDialog(PROGRESS_DIALOG_ID);
取消:
MainActivity.this.dismissDialog(PROGRESS_DIALOG_ID);
对话框与活动的上下文关联。重新创建活动时,也应该重新创建对话框,但是对话框的实例不相同。
,我遇到了同样的问题,是的,当onPostExecute与声明不匹配时,这发生在我身上……尝试类似protected Void onPostExecute(Void... arg0)
接下来要做的是放置Log.d(\“您的应用程序\”,\“此代码的位置\”);并检查哪个部分不在日志文件上执行...
希望你能找到解决方案...
,onPostExecute()与声明Void不匹配。我在旅途中,因此不在我的脑海中思考:
protected void onPostExecute(Void result)
这里更多。
,嗯,这里有两件事要引起我的注意。
1)为什么不像onPreExecute和doInBackground那样覆盖onPostExecute?
2)为什么在onPost执行后doInBackground?一般来说,顺序是
onPreExecute
doInBackground
onPostExecute