我正在尝试与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也是新手,任何帮助都会非常棒..
谢谢!
答案 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);
}
}