2017-02-27 143 views
0

我會包含示例,但是我嘗試過的幾十個示例中沒有一個似乎可以工作。如果我嘗試使用requestJsonObject,則在響應中出現錯誤,表示無法將JSONArray放入JSONObject中。如果我嘗試使用JSONArray,它似乎無法處理後期參數。我發現了一篇文章,聲稱他們更新了一些東西,以允許將JSONObject傳遞到JSONArray中,但無法找到任何地方或我如何在代碼中獲取它。 我想要做的就是發送一個簡單的平靜帖子,並得到一個json響應。我正在通過post之後發佈post,並且我對Java不夠熟悉,無法理解這些更復雜的答案,找到沒有參數的答案,或者找到試圖將JSONObject推送到JsonArrayRequest中的答案(這會引發錯誤對我來說) 如何在地獄你得到它在Android的工作?!?!以下是我嘗試的兩種方法:Android Volley POST不起作用

private void makeArrayRequest(String setSwitch) 
{ 
    try { 
     Map<String, String> params = new HashMap(); 
     params.put("func", setSwitch); 
     JSONArray parameters = new JSONArray(params); 

     DisplayToast("Sending: " + setSwitch); 
     JsonArrayRequest jsonRequest = new JsonArrayRequest(
       Request.Method.POST, url, parameters, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         DisplayText("Response: " + response.toString()); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         //error.printStackTrace(); 
         DisplayText("Error:"+error.getMessage()); 
        } 
       } 
     ); 
     Volley.newRequestQueue(this).add(jsonRequest); 
    } catch(JSONException e) { 
     // this ends up getting thrown because of the HASH input 
     DisplayText("ArrErr:"+e.getMessage()); 
    } 
} 

private void makeObjectRequest(String setSwitch) 
{ 
    DisplayToast("Sending: " + setSwitch); 


    Map<String, String> params = new HashMap(); 
    params.put("func", setSwitch); 

    JSONObject parameters = new JSONObject(params); 

    JsonObjectRequest jsonRequest = new JsonObjectRequest(
      Request.Method.POST, url, parameters, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        DisplayText("Response: " + response.toString()); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        //this ends up getting thrown because of JSONArray response? 
        DisplayText("Error:"+error.getMessage()); 
       } 
      } 
    ); 

    Volley.newRequestQueue(this).add(jsonRequest); 
} 
+0

有嘗試StringRequest? 'https:// developer.android.com/training/volley/simple.html' –

+0

問題是,我最終會讓這個東西和ESP8266對話,並且它上面的庫專門被使用(REST的方式是應該工作)通過POST/GET/DELETE /等各種功能。因此,如果可能的話,我需要弄清楚如何發送這樣的特定請求。 – Scott

+0

esp8266作爲你的android設備的主機嗎?從來沒有嘗試過,所以它沒有任何反應? –

回答

1

java和PHP之間的區別是問題。 PHP處理POST數據的方式不同,並且由於編碼的方式而沒有獲取值。

的解決辦法是將它們從PHP解碼://輸入

$post = json_decode(file_get_contents("php://input"), true); 

所概述here

+0

我想我最後一次遇到這個問題是從ESP8266回到apache/php,所以我很確定我可以讓微控制器正確讀取它們!大聲笑 – Scott