在AsyncTask.execute()上找不到源

时间:2013-01-18 06:49:52

标签: android android-asynctask

我正在尝试与AsyncTask相处.. 我的问题是我正在基于程序的输出动态地构建一个textview表。但是后来我想通过使用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());
            }
        }
    };
}

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

执行将开始一个新线程。你不想调试它。相反,在onPreExecute,doInBackground和onPostExecute中放置断点,你可以看到每个被调用的时间。

答案 1 :(得分:0)

onPostExecute已在UI线程中运行,因此您不应为其创建另一个runnable。只需像这样onPostExecute

 protected void onPostExecute(Boolean value){
            if(value == true){
                     String message = "Please try again later!!";
                     // Do something here with your message
            }
            else{
                     displayReport(result);
            }
        }