网络通信层。 AsyncTask错误处理

时间:2012-02-24 08:54:52

标签: android android-asynctask

目前我正致力于实施网络通信层。我认为首先咨询更有经验的Android开发人员是件好事。

我有一个名为WebApiController的类,它负责:发出请求和解析响应,并将它们存储在模型中。 WebApiController方法在主线程上执行,因此我将它们包装在AsyncTasks中以从主线程中取出负载。 WebApiController方法可能会抛出异常,例如ServerBadResponseException,XmlParserException等。我希望能够根据错误类型处理它们(即根据错误类型显示不同的错误消息)。那么,什么是通知onPostExecute有关错误类型的最佳方法,并在那里很好地处理它。

3 个答案:

答案 0 :(得分:1)

或者这个:

class SomeTask extends AsyncTask<Void, Void, Params> {

    @Override
    protected Params doInBackground(Void... voids) {
        Params params = new Params();
            try {
                .....
                params._result = .....
            } catch (Throwable e) {
                params._error = e;
            }
        return params;
    }

    @Override
    protected void onPostExecute(Params params) {
        if(params._error != null){
             .... 
        } else {
             .... 
        }
    }
}

class Params {
    public Throwable _error;
    public Object _result;
}

答案 1 :(得分:1)

基本上最简单的方法是设置返回代码,例如“SUCCESS”,“FAILURE_XY”并在onPostExecute()中处理。当你通常会返回数据时,这也有效...

doInBackground() {
    try {
        // code
        return data;
    } catch (Exception e) {
        Log.e(TAG, "error description", e);
        resultCode = FAILURE;
        return null;
    }
}

onPostExecute(Data data) {
    if (data == null) {
        // check resultCode!
    } else {
        // work with your data
    }
}

答案 2 :(得分:0)

你可以尝试这个(在doInBackgroung方法中):

        try {
            ........
        } catch (final Throwable e) {
            runOnUiThread(new Runnable() {
                public void run() {
                    Log.e(TAG, e.getMessage(), e);
                    Toast.makeText(......).show();
                }
            });
        }