Java:访问函数外部的String

时间:2015-05-03 22:36:14

标签: android android-async-http loopj

我是一个业余爱好程序员,我试图在onSuccess函数之外访问returnJson。在函数内部,我可以看到它按预期返回。有人可以解释为什么我不能在外面查看它以及我可以做些什么来让它在外面可以访问?

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

2 个答案:

答案 0 :(得分:1)

您可以正常访问它,但在调用onSuccess()之前不会对其进行初始化,因为Log.d()调用client.post()后很可能被异步执行。

因此,当您尝试记录returnJson时,它尚未初始化,并且日志记录将无法按预期工作。

答案 1 :(得分:-1)

您需要将returnJson设为全局变量。

让我们说这是你班级的样子:

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

returnJson变量仅在myMethod()方法内初始化。要解决此问题,您的课程应如下所示:

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

所以现在它是一个全局变量,可以从你的所有方法中加入。 享受!