Async Task在网络工作后返回int值

时间:2011-09-20 08:43:43

标签: android android-asynctask

我的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,然后开关不匹配。

1 个答案:

答案 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块开始之前,你抓住了阻塞并检查它是什么样的异常。