get android AsyncHttpClient response after it finish

岁酱吖の 提交于 2021-01-29 08:22:04

问题


hello i am using AsyncHttpClient to send request to restful api the problem is i want to have the result in onSuccess and pass it from the class who have this method to my activity

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;
}

of course i always get i=0; because it's Async method i tried to make the method send void and make a callback inside onSuccess but that produce a lot of problems with the activity (that's another question i will ask later) so do you have a way to get the value of i as statusCode? thank you.


回答1:


I tried to make the method send void and make a callback inside onSuccess

The method being void is good.

Making a callback inside onSuccess can look like this

Add a callback interface

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

Use it as a parameter and make the method void

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

Then, inside the onSuccess method, when you get the result do

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

Outside that method, where you call send, create anonymous callback class

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


来源:https://stackoverflow.com/questions/36143496/get-android-asynchttpclient-response-after-it-finish

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!