2014-01-23 31 views
1

我試圖使用Volley作爲DBA層來調用hadles JSON對象的webservice。由於此圖層位於活動和另一個服務圖層下方,因此似乎無法正常工作。我會盡力解釋我的設置:在另一個類中獲取Android Volley響應

MainActivity:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ProductService productService = new ProductService(); 
    productService.getProduct(); 
} 

ProductService.java:

public void getProduct() { 
      JsonObjectRequest req = new JsonObjectRequest("http://echo.jsontest.com/name/Milk/price/1.23/", null, createMyReqSuccessListener(), createMyReqErrorListener()); 
      ApplicationController.getInstance().addToRequestQueue(req); 
     } 

     private Response.Listener<JSONObject> createMyReqSuccessListener() { 
      return new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.v("response", response.toString()); 
       } 
      }; 
     } 

     private Response.ErrorListener createMyReqErrorListener() { 
      return new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        return; 
       } 
      }; 
     } 

我希望是非常明顯的。 最後,我想從一個活動中使用ProductService :: getProduct(),並在一個變量中使用來自webservice的實際JSON響應,我可以稍後使用它。

然而,此刻,行

Log.v("response", response.toString()); 

甚至不執行。我究竟做錯了什麼?

+0

你得到一個錯誤的反應呢?你沒有'Log',所以你可能不會注意到。 –

+0

沒有錯誤信息。代碼只是沒有執行。我的感覺是,由於這個類的工作流程,該偵聽器沒有被發現和執行。我真的很想知道當我在Volley中執行queue.add(req)時會發生什麼。 – Zorrocaesar

+0

我幾乎逐字複製了你的代碼,它第一次爲我工作。 [來源](https://gist.github.com/adamsp/6bdc3bcc1c663e63b14d)。我能看到的唯一情況是,您沒有正確地向隊列添加請求,或者在清單中缺少Internet權限。 –

回答

3

我會嘗試是這樣的:

聲明getProduct作爲

public void getProduct(Response.Listener<JSONObject> listener, 
         Response.ErrorListener errlsn) { 
      JsonObjectRequest req = new JsonObjectRequest("http://echo.jsontest.com/name/Milk/price/1.23/",null, listener, errlsn); 
      ApplicationController.getInstance().addToRequestQueue(req); 
     } 

而不是像這樣在您電話的活動:

productService.getProduct(
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         variableFromActivity = response; 
         //Or call a function from the activity, or whatever... 
        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         //Show error or whatever... 
        } 
       }); 
相關問題