【问题标题】:Data not getting posted to server while using Volley library in android在 android 中使用 Volley 库时数据未发布到服务器
【发布时间】:2014-11-05 12:51:09
【问题描述】:

我正在尝试将Post 一些JsonObject 发送到在android 中使用Volley 库的服务器。我怀疑 getparams 方法没有被调用并且我的数据没有被发布。谁能一步一步指导我哪里出错了。我的代码如下:

          case R.id.bt_search:



         try {
            jObj.put("FromDate", "04-10-2014");
            jObj.put("Todate", "04-11-2014");
            jObj.put("BillNumber", bill);
            jObj.put("Status", "NotClosed");
            jObj.put("OrderType", "1,2,3" /* Ordertype */);
            Log.i("json data on clicking search", "" + jObj);
            makeJsonObjReq(jObj);


        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        break;


  private void makeJsonObjReq(final JSONObject jObj) {
    // TODO Auto-generated method stub
    RequestQueue rq = Volley.newRequestQueue(this);
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(
            Method.POST,
            "myurl",
            null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject arg0) {
                    // TODO Auto-generated method stub
                    Log.d("server Response", arg0.toString());

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

                        }
                    } catch (Exception e) {

                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError arg0) {
                    // TODO Auto-generated method stub
                    VolleyLog.d("Error msg from server",
                            "Error: " + arg0.getMessage());

                }

            }) {

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            // TODO Auto-generated method stub
            Map<String, String> params = new HashMap<String, String>();
            params.put("data", jObj.toString());

            //return params;
             return super.getParams();

        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            // TODO Auto-generated method stub
            return super.getHeaders();
        }

    };

    com.cashier.volley_helper.AppController.getInstance()
            .addToRequestQueue(jsonObjReq);
    rq.add(jsonObjReq);
};

【问题讨论】:

    标签: android post android-volley


    【解决方案1】:

    你必须修改 getParams() 方法

    private void makeJsonObjReq(final JSONObject jObj) {
        // TODO Auto-generated method stub
        RequestQueue rq = Volley.newRequestQueue(this);
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(
                Method.POST,
                "myurl",
                null, new Response.Listener<JSONObject>() {
    
                    @Override
                    public void onResponse(JSONObject arg0) {
                        // TODO Auto-generated method stub
                        Log.d("server Response", arg0.toString());
    
                        try {
                            for (int i = 0; i < arg0.length(); i++) {
    
                            }
                        } catch (Exception e) {
    
                        }
                    }
                }, new Response.ErrorListener() {
    
                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                        // TODO Auto-generated method stub
                        VolleyLog.d("Error msg from server",
                                "Error: " + arg0.getMessage());
    
                    }
    
                }) {
    
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                // TODO Auto-generated method stub
                Map<String, String> params = super.getParams();
                 if( params==null)
                 params =new HashMap<String, String>();
                params.put("data", jObj.toString());
    
               return params;
             }
    
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                // TODO Auto-generated method stub
                return super.getHeaders();
            }
    
        };
    
        com.cashier.volley_helper.AppController.getInstance()
                .addToRequestQueue(jsonObjReq);
        rq.add(jsonObjReq);
    }
    

    【讨论】:

    • 尝试此代码给我以下错误:[1] 4.onErrorResponse: Error msg from server
    • 你把“myurl”作为myUrl了吗?
    • 如果我在其中输入日志以显示参数 der 在 d 日志中不可见
    【解决方案2】:

    你可以像这样使用自定义请求类

    public class CustomRequest extends Request<JSONObject> {
    
    	@Override
    	public Entry getCacheEntry() {
    		// TODO Auto-generated method stub
    		return super.getCacheEntry();
    	}
    
    	@Override
    	public String getCacheKey() {
    		// TODO Auto-generated method stub
    		return super.getCacheKey();
    	}
    
    	private Listener<JSONObject> listener;
    	private Map<String, String> params;
    
    	public CustomRequest(String url, Map<String, String> params,
    			Listener<JSONObject> reponseListener, ErrorListener errorListener) {
    		super(Method.GET, url, errorListener);
    		this.listener = reponseListener;
    		this.params = params;
    	}
    
    	public CustomRequest(int method, String url, Map<String, String> params,
    			Listener<JSONObject> reponseListener, ErrorListener errorListener) {
    		super(method, url, errorListener);
    		this.listener = reponseListener;
    		this.params = params;
    	}
    
    	@Override
    	protected Map<String, String> getParams()
    			throws com.android.volley.AuthFailureError {
    		System.out.println(params);
    		return params;
    	};
    
    	@Override
    	protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
    		try {
    			String jsonString = new String(response.data,
    					HttpHeaderParser.parseCharset(response.headers));
    			return Response.success(new JSONObject(jsonString),
    					HttpHeaderParser.parseCacheHeaders(response));
    		} catch (UnsupportedEncodingException e) {
    			return Response.error(new ParseError(e));
    		} catch (JSONException je) {
    			return Response.error(new ParseError(je));
    		}
    	}
    
    	@Override
    	protected void deliverResponse(JSONObject response) {
    		// TODO Auto-generated method stub
    		listener.onResponse(response);
    	}
    }

    并像这样使用它

    WeakHashMap<String, String> params = new WeakHashMap<String, String>();
    		params.put("product_id", DetailsFragment.product_id);
    		System.out.println("Printing the Jsoparams" + params);
    		CustomRequest request = new CustomRequest(Method.POST, url, params,
    				this.createMyReqSuccessListener(),
    				this.createMyReqErrorListener()) {
    
    		};
    		volley.addToRequestQueue(request, DETAILS, true);

    private Response.Listener<JSONObject> createMyReqSuccessListener() {
    		return new Response.Listener<JSONObject>() {
    			@Override
    			public void onResponse(JSONObject response) {
    				Log.d("response from services", response.toString());
    				
    //Parse the response here
    
    				
    
    		};
    	}
    
    	private Response.ErrorListener createMyReqErrorListener() {
    		return new Response.ErrorListener() {
    			@Override
    			public void onErrorResponse(VolleyError error) {
    				System.out.println("Printing the Error" + error);
    				System.out.println(VolleyErrorHelper.getMessage(error));
    			}
    
    		};
    	}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多