完成后获取android AsyncHttpClient响应

时间:2016-03-21 23:23:42

标签: android rest android-async-http

您好我正在使用AsyncHttpClientrestful api发送请求 问题是我想在onSuccess中得到结果并将其从具有此方法的类传递给我的活动

public int send(JSONObject parameters,String email,String password){
      int i =0;
    try {
        StringEntity entity = new StringEntity(parameters.toString());
        entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        client.setBasicAuth(email,password);
        client.post(context, "http://10.0.2.2:8080/webapi/add", entity, "application/json",
                new AsyncHttpResponseHandler() {


                    @Override
                    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                        try {
                            JSONObject json = new JSONObject(
                                    new String(responseBody));
                            i=statusCode;
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

                    }
                });


    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
return i;
}

当然我总是i=0;因为它是Async方法 我试图让方法发送void并在onSuccess内部进行回调,但这会产生很多活动问题(这是我稍后会问的另一个问题) 所以你有办法把i的值作为statusCode吗? 谢谢。

1 个答案:

答案 0 :(得分:4)

  

我试图让方法发送无效并在onSuccess中进行回调

无效的方法很好。

在onSuccess中进行回调可能看起来像这样

添加回调界面

public interface Callback<T> {
    void onResponse(T response);
}

将其用作参数并使方法无效

public void send(
    JSONObject parameters, 
    String email,
    String password, 
    final Callback<Integer> callback) // Add this

然后,在onSuccess方法内,当你得到结果时

if (callback != null) {
    callback.onResponse(statusCode);
}

在该方法之外,您调用send,创建匿名回调类

webServer.send(json, "email", "password", new Callback<Integer>() {
    public void onResponse(Integer response) {
        // do something
    }
});