Java: 在函数外访问字符串
Java: Accessing a String outside of a function
我是一名业余程序员,正在尝试在 onSuccess 函数之外访问 returnJson。在函数内部,我可以看到它 returns 正如预期的那样。有人可以解释为什么我不能在外面查看它以及我可以做些什么来让它在外面可以访问吗?
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);
您可以很好地访问它,但是直到 onSuccess()
被调用时它才被初始化,这很可能是 在 被调用 Log.d()
之后,由于到 client.post()
被异步执行。
因此,在您尝试记录 returnJson
的那一刻,它尚未初始化,并且记录不会如您预期的那样工作。
您需要将 returnJson
设为全局变量。
假设您的 class 长这样:
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() 方法内部初始化。要解决此问题,您的 class 应如下所示:
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);
}
}
所以现在它是一个全局变量,可以从您的所有方法访问。
享受吧!
我是一名业余程序员,正在尝试在 onSuccess 函数之外访问 returnJson。在函数内部,我可以看到它 returns 正如预期的那样。有人可以解释为什么我不能在外面查看它以及我可以做些什么来让它在外面可以访问吗?
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);
您可以很好地访问它,但是直到 onSuccess()
被调用时它才被初始化,这很可能是 在 被调用 Log.d()
之后,由于到 client.post()
被异步执行。
因此,在您尝试记录 returnJson
的那一刻,它尚未初始化,并且记录不会如您预期的那样工作。
您需要将 returnJson
设为全局变量。
假设您的 class 长这样:
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() 方法内部初始化。要解决此问题,您的 class 应如下所示:
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);
}
}
所以现在它是一个全局变量,可以从您的所有方法访问。 享受吧!