2017-06-17 33 views
-1

在我的項目中,我使用「Volley」庫從我的服務器接收數據,我製作了PHP文件,它返回JSON編碼值,並且我想從這些值中返回它們,而不僅僅是處理它們的StringRequest內,返回來自我的StringRequest的數據 - 排序庫

我的代碼是:

public static void getStatus(final String id, final Marker marker1) 
    { 
     // Tag used to cancel the request 
     String tag_string_req = "req_register"; 
     temp=""; 
     StringRequest strReq = new StringRequest(
       Request.Method.POST, 
       "http://URL/file.php", 
       new Response.Listener<String>() { 

        @Override 
        public void onResponse(String response) { 



         try { 
          JSONObject jObj = new JSONObject(response); 
          String status = jObj.getString("string"); 
          temp = status; 


         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       // Posting parameters to getData url 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("id", id); 
       return params; 
      } 

     }; 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 

    } 

如何從這個方法返回字符串「身份」? (如果我將方法更改爲無效的字符串,我仍然無法從onResponse(idk爲什麼...))返回任何值?請向我解釋爲什麼以及如何使其工作?

+0

上線的值就叫內'接受任何你想要的onResponse'另一種方法返回 –

回答

0

簡短的答案是,你不回報。你也不應該。

相反,您將結果傳遞給您想要執行的任何代碼塊。這可能是一個單獨的方法,或者都可以在StringRequest onResponse中完成。

主要的一點是,你不能在上面分配temp時StringRequest內設置它,然後期待後addToRequestQueue

+0

是的,我知道把temp作爲返回字符串是行不通的,但是你能解釋一下爲什麼嗎?或者我可以在哪裏閱讀? – drdisrespect

+0

這就是異步代碼的工作原理。線程是你可以閱讀的一般話題 –

+0

在類似的問題上,你可能已經看到了Asynctask和Volley的比較。您可以使用響應偵聽器來構建Asynctask以及https://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a –

相關問題