我不知道为什么medicine_description
在onResponse之外返回null。
StringRequest stringRequest = new StringRequest(Request.Method.GET, fda_api + "acetaminophen", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject json = new JSONObject(response);
JSONArray jArray = json.getJSONArray("results");
Log.d(TAG, "readJSON: " + jArray.length());
JSONObject json_data = jArray.getJSONObject(0);
medicine_description = json_data.getString("description");
Log.i("THIS ONE IS FINE",medicine_description);
/*for(int i=0; i<jArray.length(); i++){
JSONObject json_data = jArray.getJSONObject(i);
medicine_description = json_data.getString("description");
Log.i("log_tag",medicine_description);
}*/
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(context);
requestQueue.add(stringRequest);
Log.i(TAG, "THIS RETURNS NULL: " + medicine_description);
答案 0 :(得分:2)
Volley以异步方式工作,这意味着您无法知道响应何时从您的Web服务到达。它将在单独的线程而不是UI线程上工作。
因此无论Volley
响应如何,外部代码块都将被执行。
如果你需要函数中的字符串,你应该创建一个方法,并在得到结果时调用它。
以下是一个例子:
public void onResponse(String response) {
try {
JSONObject json = new JSONObject(response);
JSONArray jArray = json.getJSONArray("results");
Log.d(TAG, "readJSON: " + jArray.length());
JSONObject json_data = jArray.getJSONObject(0);
medicine_description = json_data.getString("description");
passdata(medicine_description); //create method to pass data
Log.i("THIS ONE IS FINE",medicine_description);
/*for(int i=0; i<jArray.length(); i++){
JSONObject json_data = jArray.getJSONObject(i);
medicine_description = json_data.getString("description");
Log.i("log_tag",medicine_description);
}*/
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 1 :(得分:1)
onResponse
,因此 后记录输出。请求队列不会阻止您当前的线程。