【问题标题】:send post from JsonArrayRequest volley to server not working从 JsonArrayRequest 凌空发送帖子到服务器不起作用
【发布时间】:2016-12-24 03:10:19
【问题描述】:

我已经尝试了一些关于从 JsonArrayRequest volley 向服务器发送帖子的示例,但它不起作用并且日志中没有错误..

所以当我在服务器中调用帖子时,帖子无法获取,并且在不调用帖子时显示我的数据,但是现在当调用帖子时,数据不显示

这是代码

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);
    }

【问题讨论】:

    标签: php android android-volley


    【解决方案1】:

    如果POST 仍然无法工作,请使用GET

    例子

    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);
    

    【讨论】:

      【解决方案2】:

      使用这个:

      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);
      

      【讨论】:

      • 我如何使用 public void onResponse(Object response) { 因为我的响应为 JsonArray 就像这样 JSON_PARSE_DATA_AFTER_WEBCALL(response); ,所以 response 是错误的,因为是对象而不是数组
      • 我正在更新我的答案.. 请稍候
      【解决方案3】:

      试试这个方法

      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();
          }
      }
      

      【讨论】:

      • 当我调用 `JSON_PARSE_DATA_AFTER_WEBCALL(response);` 时,Response 出错,因为您的代码是 jsonobject 而不是 jsonarray
      • 你需要修改你的 JSON_PARSE_DATA_AFTER_WEBCALL(response);方法
      • 你能分享你的 JSON_PARSE_DATA_AFTER_WEBCALL(response);方法在这里,所以我可以编辑它
      • 发表您的回复
      • 什么反应?
      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多