我的Asyntask结构为:
private class GetMyFlights extends AsyncTask<String, Void, Integer> {
private ProgressDialog dialog;
public GetMyFlights(ListActivity activity) {}
protected void onPreExecute() {
if(mFirstOpen){
mFirstOpen = false;
dialog = new ProgressDialog(mCtx);
this.dialog.setMessage(getResources().getString(R.string.common_getting_data));
this.dialog.show();
}
}
@Override
protected Integer doInBackground(String... params) {
return getData();
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
//if(mFinishGettingData){ //global variable
mFinishGettingData = false;
switch(result){
case 0:
//...
break;
case 1:
//...
break;
case 2:
//...
break;
}
//}
}
}
我的方法getData:
private int getData() {
try{
myFlightsA = new FlightAdapter(this, R.layout.row_myflight, WithingsAPI.getInstance().getFutureFlights());
//mFinishGettingData = true;
if(myFlightsA != null)
return 0;
}catch(NetworkConnetionException e){
if(e.getMessage().equals(NetworkConnetionException.ERROR_CONNECTION))
return 1;
else if(e.getMessage().equals(NetworkConnetionException.NOT_LOGGED)){
Log.d(TAG, "Not Logged");
return 2;
}
}catch(Exception e){
Log.d(TAG, e.toString());
}
return 3;
}
但是我不知道我是否做错了,因为有时候Task会按预期工作,但有时会出现对话框,因为getData返回3,之后返回1.
我考虑过使用全局变量mFinishGettingData
来通知网络结束工作。并且还返回4而不是3,然后开关不匹配。
答案 0 :(得分:1)
这个AsyncTask只有一种方式可以返回3.
您的FlightAdapter会抛出错误,并且异常类型与catch块中的任何if..else都不匹配。
if(e.getMessage().equals(NetworkConnetionException.ERROR_CONNECTION))
return 1;
else if(e.getMessage().equals(NetworkConnetionException.NOT_LOGGED)){
Log.d(TAG, "Not Logged");
return 2;
}
我建议您记录异常
i:e Log.e(TAG, e.getMessage().toString);
在你的if块开始之前,你抓住了阻塞并检查它是什么样的异常。