2016-12-24 136 views
0

我已經試了一下從JsonArrayRequest抽射服務器發送POST一些例子,但它沒有工作,沒有在日誌中的錯誤..發送POST到服務器不工作

所以當我調用服務器後後不能得到我的數據時,不叫職位是表演,但現在當調用後,該數據未顯示

這個代碼

public void JSON_DATA_WEB_CALL() { 
      CustomJsonArrayRequest request = new CustomJsonArrayRequest (GET_JSON_DATA_HTTP_URL, 
        new Response.Listener<JSONArray>() { 
         @Override 
         public void onResponse(JSONArray response) { 

          JSON_PARSE_DATA_AFTER_WEBCALL(response); 
         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 

         } 
        }){ 
       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        HashMap<String, String> params = new HashMap<String, String>(); 
        params.put("name", "value"); 
        return params; 
       } 
      }; 
      requestQueue = Volley.newRequestQueue(this); 
      requestQueue.add(request); 
    } 

這個代碼爲新類

public class CustomJsonArrayRequest extends JsonRequest<JSONArray> { 

     public CustomJsonArrayRequest(String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener) { 
      super(Method.POST, url, null, listener, errorListener); 
     } 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<String, String>(); 
      params.put("name", "value"); 
      return params; 
     } 

     @Override 
     protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) { 
      try { 
       String jsonString = 
         new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
       return Response.success(new JSONArray(jsonString), 
         HttpHeaderParser.parseCacheHeaders(response)); 
      } catch (UnsupportedEncodingException e) { 
       return Response.error(new ParseError(e)); 
      } catch (JSONException je) { 
       return Response.error(new ParseError(je)); 
      } 
     } 
    } 

after webcall 

public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){ 

     for(int i = 0; i<array.length(); i++) { 

      GetDataAdapterRiwayat GetDataAdapter2 = new GetDataAdapterRiwayat(); 

      JSONObject json = null; 
      try { 

       json = array.getJSONObject(i); 

       GetDataAdapter2.setIdJalanRiwayat(json.getString(JSON_ID_JALAN)); 
       GetDataAdapter2.setNamaJalanRiwayat(json.getString(JSON_NAMA_JALAN)); 
       GetDataAdapter2.setLatitudeRiwayat(json.getString(JSON_LATITUDE)); 
       GetDataAdapter2.setLongitudeRiwayat(json.getString(JSON_LONGITUDE)); 
       GetDataAdapter2.setFotoSebelumRiwayat(json.getString(JSON_FOTO_SEBELUM)); 
       GetDataAdapter2.setFotoSetelahRiwayat(json.getString(JSON_FOTO_SETELAH)); 
       GetDataAdapter2.setIdRiwayat(json.getString(JSON_ID_RIWAYAT)); 

      } catch (JSONException e) { 

       e.printStackTrace(); 
      } 
      GetDataAdapter1.add(GetDataAdapter2); 
     } 

     recyclerViewadapterRiwayat = new RecyclerViewAdapterRiwayat(GetDataAdapter1, this); 

     recyclerView.setAdapter(recyclerViewadapterRiwayat); 
    } 

回答

0

只是使用GET如果POST仍無法正常工作

例如

CustomJsonArrayRequest request = new CustomJsonArrayRequest (GET_JSON_DATA_HTTP_URL + "?&name=value", 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 

         JSON_PARSE_DATA_AFTER_WEBCALL(response); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 

        } 
       }); 

和變化類CustomJsonArrayRequest

super(Method.POST, url, null, listener, errorListener); 

super(Method.GET, url, null, listener, errorListener); 
0

嘗試這種方式

public void JSON_DATA_WEB_CALL() { 

    Map<String, Object> jsonParams = new HashMap<>(); 
    jsonParams.put("name", "value"); 

    JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, GET_JSON_DATA_HTTP_URL, 

      new JSONObject(jsonParams), 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 

        Log.e("Res", response.toString()); 

        // Do your stuff here 

        JSON_PARSE_DATA_AFTER_WEBCALL(response); 


       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // Handle Error 
       } 
      }) { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Content-Type", "application/json; charset=utf-8"); 
      headers.put("User-agent", System.getProperty("http.agent")); 
      return headers; 
     } 
    }; 
    queue.add(postRequest); 
} 



public void JSON_PARSE_DATA_AFTER_WEBCALL(String response) { 

    try { 

     JSONArray jsonArray = new JSONArray(response); 

     for (int i = 0; i < jsonArray.length(); i++) { 

      GetDataAdapterRiwayat GetDataAdapter2 = new GetDataAdapterRiwayat(); 

      JSONObject json = null; 

      try { 

       json = jsonArray.getJSONObject(i); 

       GetDataAdapter2.setIdJalanRiwayat(json.getString(JSON_ID_JALAN)); 
       GetDataAdapter2.setNamaJalanRiwayat(json.getString(JSON_NAMA_JALAN)); 
       GetDataAdapter2.setLatitudeRiwayat(json.getString(JSON_LATITUDE)); 
       GetDataAdapter2.setLongitudeRiwayat(json.getString(JSON_LONGITUDE)); 
       GetDataAdapter2.setFotoSebelumRiwayat(json.getString(JSON_FOTO_SEBELUM)); 
       GetDataAdapter2.setFotoSetelahRiwayat(json.getString(JSON_FOTO_SETELAH)); 
       GetDataAdapter2.setIdRiwayat(json.getString(JSON_ID_RIWAYAT)); 

      } catch (JSONException e) { 

       e.printStackTrace(); 
      } 
      GetDataAdapter1.add(GetDataAdapter2); 
     } 

     recyclerViewadapterRiwayat = new RecyclerViewAdapterRiwayat(GetDataAdapter1, this); 

     recyclerView.setAdapter(recyclerViewadapterRiwayat); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 


} 

編輯答案

public void JSON_DATA_WEB_CALL() { 

    String GET_JSON_DATA_HTTP_URL = "http://jalanrusak.16mb.com/AndroidFileUpload/GetDataRiwayat.php"; 

    Map<String, Object> jsonParams = new HashMap<>(); 
    jsonParams.put("name", "value"); 

    RequestQueue queue = Volley.newRequestQueue(MainActivity.this); 

    JsonArrayRequest postRequest= new JsonArrayRequest(GET_JSON_DATA_HTTP_URL, new Response.Listener<JSONArray>() { 

     @Override 
     public void onResponse(JSONArray response) { 

      Log.e("Res", response.toString()); 
      JSON_PARSE_DATA_AFTER_WEBCALL(response.toString()); 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      // Handle Error 
      Log.e("Res", error.toString()); 
     } 
    }); 

    queue.add(postRequest); 
} 

public void JSON_PARSE_DATA_AFTER_WEBCALL(String response) { 

    try { 

     JSONArray jsonArray = new JSONArray(response); 

     for (int i = 0; i < jsonArray.length(); i++) { 

      GetDataAdapterRiwayat GetDataAdapter2 = new GetDataAdapterRiwayat(); 

      JSONObject json = null; 

      try { 

       json = jsonArray.getJSONObject(i); 

       GetDataAdapter2.setIdJalanRiwayat(json.getString(JSON_ID_JALAN)); 
       GetDataAdapter2.setNamaJalanRiwayat(json.getString(JSON_NAMA_JALAN)); 
       GetDataAdapter2.setLatitudeRiwayat(json.getString(JSON_LATITUDE)); 
       GetDataAdapter2.setLongitudeRiwayat(json.getString(JSON_LONGITUDE)); 
       GetDataAdapter2.setFotoSebelumRiwayat(json.getString(JSON_FOTO_SEBELUM)); 
       GetDataAdapter2.setFotoSetelahRiwayat(json.getString(JSON_FOTO_SETELAH)); 
       GetDataAdapter2.setIdRiwayat(json.getString(JSON_ID_RIWAYAT)); 

      } catch (JSONException e) { 

       e.printStackTrace(); 
      } 
      GetDataAdapter1.add(GetDataAdapter2); 
     } 

     recyclerViewadapterRiwayat = new RecyclerViewAdapterRiwayat(GetDataAdapter1, this); 
     recyclerView.setAdapter(recyclerViewadapterRiwayat); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
+0

當我調用'JSON_PARSE_DATA_AFTER_WEBCALL(response);'因爲你的代碼是jsonobject而不是jsonarray時'Response'錯誤 –

+0

您需要修改JSON_PARSE_DATA_AFTER_WEBCALL(response);方法 –

+0

你能分享你的JSON_PARSE_DATA_AFTER_WEBCALL(response);方法在這裏,所以我可以編輯它 –

0

使用這樣的:

public class BaseRequest extends Request<JSONArray> { 
    private static final String TAG = BaseRequest.class.getSimpleName(); 
    private final Gson gson = new Gson(); 


    private final Response.Listener listener; 

    public BaseRequest(String url, Response.Listener responseListener, Response.ErrorListener listener) { 
     super(Request.Method.GET, url, listener); 
     Log.e(TAG, "Requesting url : " + url); 
     this.listener = responseListener; 
    } 
    public BaseRequest(int method, String url, Response.Listener responseListener, Response.ErrorListener listener) { 
     super(method, url, listener); 
     Log.e(TAG, "Requesting url : " + url); 
     this.listener = responseListener; 
    } 

    @Override 
    public Response<JSONArray> parseNetworkResponse(NetworkResponse response) { 

     try { 
      String json = null; 
      json = new String(
        response.data, 
        HttpHeaderParser.parseCharset(response.headers)); 
      JSONArray result = new JSONArray(json); 

      return Response.success(
         result, 
         HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 

      return Response.error(new ParseError(e)); 

     } catch (JsonSyntaxException e) { 

      return Response.error(new ParseError(e)); 
      e.pri 

     } catch (JSONException e) { 
      return Response.error(new ParseError(e)); 
     } 


    } 

    @Override 
    protected VolleyError parseNetworkError(VolleyError volleyError) { 
     return volleyError; 
    } 

    @Override 
    protected void deliverResponse(JSONArray response) { 
     listener.onResponse(response); 
    } 


} 

,並要求:

BaseRequest baseRequest = new BaseRequest(Request.Method.POST, url, new Response.Listener() { 
      @Override 
      public void onResponse(JSONArray response) { 

       //Response as JsonArray 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Error : " + error.getMessage()); 

      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<>(); 

       //Your parameters 
       return params; 
      } 
     }; 

queue.add(baseRequest); 
+0

如何使用public void onResponse(Object response){'because我的反應像JSONArray這樣'JSON_PARSE_DATA_AFTER_WEBCALL(response);',所以'response'是錯誤的,因爲是object not array –

+0

將其轉換爲jsonArray ...它會工作 –

+0

我在更新我的答案..請稍後 –

相關問題