1

我正在尝试与 AsyncTask 相处。我的问题是我正在根据过程的输出动态构建一个 textviews 表。但后来我发现通过使用 asynctask 我可以以更有效的方式做到这一点..所以,我所做的如下:

private class DisplayReport extends AsyncTask<Void, Void, Boolean>{
    protected void onPreExecute(){
        //Message -- "Please wait while the Report Loads..."
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        //Here i fetch the data from the procedure via a web service
        //parse the result of web service and set a bool variable true or false based on whether the dataset fetched is empty or not.
    }
    protected void onPostExecute(Boolean value){
        if(value == true){
                 "Please try again later!!"
        }
        else{
                 runOnUiThread(GenTable);
        }
    }
    private Runnable GenTable = new Runnable(){
        public void run(){
            try {
                displayReport(result); // in this method i build the table.
            } catch (Exception e) {
                ad.setTitle("Error..");
                ad.setMessage(e.toString());
            }
        }
    };
}

上面的异步类是我的主类中的一个内部类,它扩展了活动。这就是我执行异步任务的方式..

DisplayReport dr = new DisplayReport();
dr.execute();

现在当我调试时,我得到了"source not found" error on dr.execute().. 我尝试在网上搜索很多,但我根本找不到任何具体的东西。另外,如果我的方法不正确,请告诉我..这个问题可能看起来很傻,但我也是android和java的新手,任何帮助都会非常棒..

谢谢!

4

2 回答 2

0

onPostExecute已在 UI 线程中运行,因此您不应为其创建另一个可运行对象。让你onPostExecute像这样:

 protected void onPostExecute(Boolean value){
            if(value == true){
                     String message = "Please try again later!!";
                     // Do something here with your message
            }
            else{
                     displayReport(result);
            }
        }
于 2013-01-18T06:59:45.557 回答
0

Execute 将启动一个新线程。你不想调试它。取而代之的是,在 onPreExecute、doInBackground 和 onPostExecute 中放置断点,您可以看到它们中的每一个何时被调用。

于 2013-01-18T06:54:19.623 回答