我有一个AsyncTask,它使用轮询队列来查看是否有新对象到达。当它检测到新对象时,我将它作为字符串收集信息,然后发布进度(信息)。在onProgressUpdate中,它将字符串添加到列表中。我遇到的问题是程序永远不会进入onProgressUpdate。我在调试器中逐步完成它,我看到它调用了publishProgress,但它从未进入onProgress更新。看起来像这样:
@Override
protected void onProgressUpdate(String... values) {
messageQueue.add(displayName + " : " + values[0]); //I have a breakpoint here that the program never hits.
((BaseAdapter) getListAdapter()).notifyDataSetChanged();
super.onProgressUpdate(values);
}
@Override
protected Void doInBackground(Void... params) {
while (true) {
Packet p = pc.pollResult();
if(p != null){
String body = ((Message) p).getBody(); //I have a breakpoint here that the program hits only when a new object is in the queue
publishProgress(body);
}
}
}
答案 0 :(得分:2)
我有一个问题,它没有被调用,但我只是注意到我把错误的类。当然它假设在AsyncTask块内,但是我在那个块之外创建了它
答案 1 :(得分:1)
来自http://developer.android.com/reference/android/os/AsyncTask.html
线程规则
此类必须遵循一些线程规则才能正常工作:
execute(Params...) must be invoked on the UI thread.
答案 2 :(得分:0)
这可以帮助有真正错误的人
注意AsyncTask中的第二个参数是指Progress
AsyncTask<Params, Progress, Result>
确保您的数据类型匹配。
AsyncTask<URL, String, Long>{
protected Long doInBackground(URL... urls) {
return long;
}
protected void onProgressUpdate(String... values) {}
protected void onPostExecute(Long result) {}
}