如何在类onResponse之外访问字符串值“data”。总是我使用Toast外部类响应显示为null。
String data;
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
data = response.getString("name"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.toString(),Toast.LENGTH_SHORT).show();
}
});
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(objectRequest);
}
Toast.makeText(getApplicationContext(),“Display:”+ data,Toast.LENGTH_SHORT).show();
JsonObjectRequest
,我假设是一个凌空请求是一个异步任务。因此它将运行后台线程和UI线程上的代码运行为结束。这就是data
变量为空的原因。
Volley结果返回主线程上的回调,因此您可以直接显示toast或在回调方法中执行Update UI。
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String data = response.getString("name"));
Toast.makeText(getApplicationContext(), "Display: " + data,Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.toString(),Toast.LENGTH_SHORT).show();
}
});
注意: - 如果你想先前定义变量data
那么它必须是实例变量(类级别)。因为你不能在内部类中使用非最终局部变量,即Response.Listener
。
您可能在错误的时间访问“数据”,尝试在设置后直接显示Toast,如果它在那里显示为null,则数据确实为空。 (>和<显示一个空字符串,如果它是空的)。
Toast.makeText(getApplicationContext(), ">" + data+"<",Toast.LENGTH_SHORT).show();