publishProgress没有调用onProgressUpdate方法

5
我有一个 AsyncTask,用于轮询队列以查看是否有新对象到达。当它检测到新对象时,我让它将信息收集为字符串,然后发布进度(info)。在 onProgressUpdate 中,它将字符串添加到列表中。我遇到的问题是程序从未进入 onProgressUpdate。我在调试器中逐步执行代码,看到它调用了 publishProgress,但它永远不会进入 onProgressUpdate。大概是这样的:
    @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);
            }
        }

    }

奇怪,你试过将String body改为String数组吗? - Jack
1
很抱歉这篇文章有点浪费,我想我的模拟器可能出了点问题。我重新启动了eclipse,一切都正常了... - Vincent Smith
我本来想推荐的,但想到可能会被踩👎。 - Jack
3个回答

2

我遇到了一个问题,它没有被调用,但我刚刚注意到我把它放在了错误的类中。当然,它应该在AsyncTask块内部,但是我却将它创建在那个块的外面。


1

0

这可能会帮助到遇到真正错误的人

请注意AsyncTask中的第二个参数是指进度

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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接