publishProgress没有调用onProgressUpdate

时间:2011-08-25 16:38:26

标签: android android-asynctask

我有一个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);
            }
        }

    }

3 个答案:

答案 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) {}

}