-1

I am a hobby programmer and am trying to access returnJson outside of the onSuccess function. Inside of the function, I can see that it returns as expected. Could somebody explain why I cannot view it outside and what I can do to make it accessible on the outside?

String returnJson;
client.post(context, url, entity, "application/json", new JsonHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
        returnJson = response.toString();
    }
});

Log.d("get json",returnJson);
Tim
  • 41,901
  • 18
  • 127
  • 145
AWippler
  • 417
  • 3
  • 9
  • 16

2 Answers2

1

You can access it fine, but it is not initialized until the onSuccess() is called, which is likely after the Log.d() is called, due to client.post() being executed asyncronously.

Because of this, at the moment you try to log returnJson, it is not yet initialized and the logging won't work as you expect.

Tim
  • 41,901
  • 18
  • 127
  • 145
-1

You need to make returnJson a global variable.

Let's say this is what your class looks like:

public class MyClass {
    public void myMethod() {
        String returnJson;
        client.post(context, url, entity, "application/json", new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                 returnJson = response.toString();
            }
        });
        Log.d("get json",returnJson);
    }
}

The returnJson variable is only initialized inside of the myMethod() method. To fix this, your class should look like this:

public class MyClass {
    String returnJson;
    public void myMethod() {
        client.post(context, url, entity, "application/json", new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                 returnJson = response.toString();
            }
        });
        Log.d("get json",returnJson);
    }
}

So now it's a global variable and can be accesed from all your methods. Enjoy!

Tim
  • 41,901
  • 18
  • 127
  • 145
Lucas Baizer
  • 305
  • 2
  • 5
  • 13