Android/Java:onProgressUpdate()没有被调用?

8

我在这里阅读了类似的帖子,甚至进行了谷歌搜索,但没有解决方案。

onProgressUpdate()没有被调用。

以下是代码:

public class DoHardWork extends AsyncTask {

    @Override
    protected Object doInBackground(Object... params) {


        publishProgress("Requesting XML data");
        this.requestData();

        publishProgress("Returning results");
        this.returnResults();

        return null;
    }



    protected void onProgressUpdate(String text) {
        super.onProgressUpdate(text);
        MainActivity.setLog(text);
    }
}

我尝试在onProgressUpdate()中设置断点,但它从未被调用。就好像代码被忽略了一样。 有人遇到过类似的问题,结果发现只是Eclipse出了问题,但我尝试重新启动它,仍然无法解决问题。 有什么想法?
1个回答

13

我认为你的代码有遗漏。尝试使用以下代码:

private class DoHardWork extends AsyncTask<Void, String, Long> {
    protected Long doInBackground(Void... urls) {
         publishProgress("Requesting XML data");
         this.requestData();

         publishProgress("Returning results");
         this.returnResults();

         return null;
    }

    protected void onProgressUpdate(String... progress) {
        super.onProgressUpdate(progress);
        MainActivity.setLog(progress[0]);
    }


}

搞定了!我对Java还比较新,所以尽可能保持简单,我不知道需要使用泛型。不过还有一个问题,为什么我不能从onCancelled()中调用publishProgress()?那似乎应该是可以的。 - qwerty
你可以调用publishProgress(),但在泛型的第二个值上必须放置Void,像这样:DoHardWork扩展AsyncTask<Void,Void,Long>。请查看此链接http://developer.android.com/reference/android/os/AsyncTask.html。 - Pablo
2
更好的做法是在方法声明上添加 @Override,这样你就不必猜测是否正确了,编译器会为你完成。 - vt.

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