【发布时间】:2017-06-17 00:28:42
【问题描述】:
public class responseListener implements Response.Listener<JSONObject>{
public String status;
@Override
public void onResponse(JSONObject response) {
try {
status = response.getString("status");
Log.d("Inside onResponse() ", status);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
private String getImageStatus(String url){
responseListener response_listener = new responseListener();
JsonObjectRequest jsonRequest = new JsonObjectRequest
(Request.Method.GET, url, null, response_listener, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
String status=response_listener.status;
Volley.newRequestQueue(MainActivity.this).add(jsonRequest);
Log.d("In getImageStatus():", status);
return status;
}
Logcat 屏幕:
06-17 10:07:57.231 15799-15849/com.example.user.streetviewman E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.user.streetviewman, PID: 15799
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:318)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:143)
at com.example.user.streetviewman.MainActivity$LongOperation.getImageStatus(MainActivity.java:194)
at com.example.user.streetviewman.MainActivity$LongOperation.doInBackground(MainActivity.java:85)
at com.example.user.streetviewman.MainActivity$LongOperation.doInBackground(MainActivity.java:62)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761) 06-17 10:07:57.396 15799-15799/com.example.user.streetviewman D/yo myannn inside:: ZERO_RESULTS
Log.d("Inside onResponse()", status) 在 logcat 的最后一行返回 ZERO_RESULTS,这是我想要的响应但是 Log.d("In getImageStatus", status)返回 null 并出现错误:“java.lang.NullPointerException: println 需要一条消息”。我该怎么做才能让 Log.d("In getImageStatus",status) 返回 ZERO_RESULTS 而不是 null ?强>
所有这些方法都在扩展 AsyncTask 的类 LongOperation 中。我从 LongOperation 的 doInBackground() 方法调用 getImageStatus()。
【问题讨论】:
-
又一个...响应在 onResponse 中准备好不早(不是在从 getImageStatus 返回时)
-
+Selvin,你能帮忙吗?接下来我该怎么办?
标签: java android multithreading runtime-error