在AndroidAsyncHTTP中的每个onFailure块中调用一个函数

时间:2014-12-23 12:59:08

标签: android optimization android-async-http

我在我的应用中的许多位置使用android-async-http库。我通常的onFailure()块看起来像这样:

APIClient.POST("/user/login", params, new JsonHttpResponseHandler() {
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
        // Do onSuccess stuff...
    }

    public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject error) {
        Toast.makeText(
            getApplicationContext(), 
            "Something Went Wrong!", 
            Toast.LENGTH_SHORT
        ).show();

        // Other onFailure stuff
    }
});

所以我基本上在每个onFailure块中显示此Toast。难道没有更好的方法吗?我不能用原始APIClient.POST()方法做一些事情,每次都为我做这件事吗?因此,如果我没有覆盖一个呼叫的onFailure块,它仍会显示此Toast。这是我的APIClient.POST方法:

public static void POST(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
    // Maybe do somesthing with responseHandler here before passing it off to AsyncHttpClient?
    client.post(getAbsoluteUrl(url), params, responseHandler);
}

感谢我能得到的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

你可以这样做,并使用这个类而不是JsonHttpResponse:

public class MyJsonHttpResponseHandler extends JsonHttpResponseHandler {

    private Context context;

    public MyJsonHttpResponseHandler(Context context){
        super();
        this.context = context;
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
        Toast.makeText(
                context,
                "Something Went Wrong!",
                Toast.LENGTH_SHORT
        ).show();

    }
}

像这样使用

APIClient.POST("/user/login", params, new MyJsonHttpResponseHandler(getActivity()){ ....