Асинхронная задача, возвращающая значение int после работы сети - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть структура 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;
}

Но я не знаю, делаю ли я что-то неправильно, так как иногда Задача работает какожидается, но иногда появляется диалоговое окно, поскольку getData возвращает 3, а затем 1.

Я думал об использовании глобальной переменной mFinishGettingData для уведомления об окончании работы сети.А также верните 4 вместо 3, чтобы потом не совпадать ни с одним.

1 Ответ

1 голос
/ 20 сентября 2011

Есть только один способ, которым AsyncTask может вернуть 3.

Ваш FlightAdapter выдает ошибку, и тип исключения не соответствует ни одному из if..else if внутри блока catch.

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 внутри блока перехвата и проверки, чтобы увидеть, какое исключение он выдает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...