2017-06-17 32 views
-3
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( 「內部onResponse()」,地位)在logcat中的最後一行返回ZERO_RESULTS,這是我想要的答覆,但Log.d( 「在getImageStatus」中,status)返回null,我得到錯誤:「java.lang.NullPointerException:println需要一條消息」。 我能做些什麼來獲得Log.d(「在getImageStatus」,狀態)返回ZERO_RESULTS而不是null?

所有這些方法是一類LongOperation延伸的AsyncTask內部。我從doInBackground()LongOperation的方法調用getImageStatus()

+1

另一個...響應準備在onResponse不及早(在沒有回報的從getImageStatus時間) – Selvin

+0

Selvin請你能幫助+?接下來我應該做什麼? –

回答

0

您有兩個名爲「status」的字符串。更改第二個名稱,它可能不知道要使用哪一個

+0

謝謝,但我不認爲這是問題。我嘗試了你的建議,但沒有奏效。 –

+0

你做了第一個「status」字符串public,所以試試String s = status;代替String status = response_listener.status;然後在Log.d語句中將「狀態」更改爲「s」 – CCT

0

responseListener類中,status變量只在調用onResponse時才分配一個值。所以很自然,它返回String status=response_listener.status上的null值。

+0

您可以給我一種建議,告訴我狀態值不爲空的方式嗎? –

+0

我建議你看一些Volley的例子,以及它們是如何處理的。 –

相關問題