Eric Cheng
Eric Cheng

Reputation: 21

LoopJ AndroidAsyncHttp didn't go to onSuccess() or onFailure()

I used LoopJ AndroidAsyncHttp to get the response from the url, but the code didn't go into onSuccess() or onFailure(). The code is as below:

public void queryTopic(RequestParams params) {
    AsyncHttpClient client = new AsyncHttpClient();
    client.get("http://192.168.0.109:8080/PhoneServer/topic/query", params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            System.out.println("It's in onSuccess");
        }

        // When the response returned by REST has Http response code
        // other than '200'
        @Override
        public void onFailure(int statusCode, Throwable error,
                String content) {
            System.out.println("It's in onFailure");
        }
    });
    System.out.println("It's over");
}

It just printed out the "It's over". What's the matter with the AsyncHttpClient?

Upvotes: 1

Views: 1014

Answers (3)

Anurag Kumar
Anurag Kumar

Reputation: 1499

onSuccess() is an overloaded method be careful regarding what you send from server, if it is a jsonObject or jsonArray or simple string. Use corresponding overloaded method of onSuccess(). I am using it too for a jsonObject response and i confront no error or irregularities in the method.

I return jsonObject from server for which my code works as expected and is as follows:

        RequestParams params = new RequestParams();
        params.put("pet","Cat");
        params.put("name","Maran");
        RestClient.get("/savelocation", params, new JsonHttpResponseHandler(){
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                Toast.makeText(context,response.toString(),Toast.LENGTH_SHORT).show();
                Log.e("Error makerequest","request completed");
            }

            @Override
            public void onFinish() {
                //onLoginSuccess();
            }
            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable,JSONObject errorResponse){
                Toast.makeText(context,throwable.toString(),Toast.LENGTH_LONG).show();
            }
        });

Note: RestClient is a static instance of AsyncHttpClient

Upvotes: 0

Jotunheim
Jotunheim

Reputation: 110

maybe the problem is that you ask to the server for a String

public void onSuccess(String response){...}

but server answer with a JSONObject

You can try this code:

AsyncHttpClient client = new AsyncHttpClient();
            client.setTimeout(5000);
            client.get(yourActivity.class, yourLink, new JsonHttpResponseHandler(){

            @Override
            public void onStart() {
                    Log.e(TAG, "start");
            }

            @Override
            public void onSuccess(int status, Header[] headers, JSONObject answer) {
                    Log.e(TAG, "SUCCESS");
                    Log.e(TAG, "print => "+answer.getString("answer_id")); //"answer_id" is a random example

            }

            @Override
            public void onFailure(int status, Header[] headers, String answer, Throwable throwable) {
                    Log.e(TAG, "FAILURE");
            }


    });

Upvotes: 0

Digish Gabhawala
Digish Gabhawala

Reputation: 44

How are you calling this? Is the context alive? If you are calling it from some place where context is no more available, then you will never get this callbacks.

I think you should try calling this queryTopic() method on click of some button and then wait for some time, you should get the response.

Upvotes: 0

Related Questions