【问题标题】:Volley doesnt pass post parametersVolley 不传递 post 参数
【发布时间】:2015-04-02 22:11:47
【问题描述】:

我在我的 Android 项目中使用 Volley 将其连接到服务器。

我需要使用post 方法将数据发送到 url 并获得响应,但 volley 不传递我的数据。

这是我的代码:

StringRequest jsonObjReq = new StringRequest(Request.Method.POST,url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jres=new JSONObject();
                        jres.opt(response);
                        if(jres.getString("value").toLowerCase()=="true"){
                            ConfirmMob=txtMob.getText().toString();
                            SubmitMob();
                        }
                        else{
                            AlertDialog.Builder dialog=new AlertDialog.Builder(App.getContext());
                            dialog.setMessage(R.string.IncorrectMob);
                            dialog.show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    loading.hide();
                }
            }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d("IsMobValid - " + error.networkResponse, "Error: " + error.getMessage());
            error.printStackTrace();
            error.networkResponse
            loading.hide();
        }
    }){
        @Override
        protected Map<String,String> getParams()throws AuthFailureError{
            Map<String,String> params = new HashMap<String, String>();
            params.put("x", "IsMobValid");
            params.put("Mob", txtMob.getText().toString());
            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> params = new HashMap<String, String>();
            params.put("Content-Type","application/x-www-form-urlencoded");
            return params;
        }

    };

    App.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

如何修复它以使其正常工作? 有什么问题吗?

【问题讨论】:

  • 你有没有收到任何错误信息onErrorResponse
  • 没有@yaa110。在服务器端发生错误,因为请求需要一些参数,但在我的请求 volley 中不要将它们发送到服务器
  • 你启动请求队列了吗?
  • 在上面代码的最后一行,当请求添加到 requestQueue 时,请求开始@ElDuderino

标签: android http-post android-volley


【解决方案1】:

我认为凌空是有缺陷的!

JsonObjectRequest 的请求中根本没有传递参数。 在StringRequest 的请求中,如果发送自定义 header ,那听起来 HTTPRequest 是不正常的。因为我的服务器导致500 Error

通过删除下面的代码,我的问题得到了解决。

@Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String,String> params = new HashMap<String, String>();
        params.put("Content-Type","application/x-www-form-urlencoded");
        return params;
    }

【讨论】:

    【解决方案2】:

    JSON 请求都失败了,因为在服务器端,所有 POST 参数都是空的!我的带有 Express 的 node.js 服务器正在使用 express.bodyparser(),它以前在本地工作得很好。 同样奇怪的是,标题工作得很好。

    经过大量搜索并在 Volley 用户组寻求帮助后,我发现了一个技巧,即在内容类型标题上设置字符集。因为没有它,bodyparser 将无法正确解析该参数。 因此,正确的内容类型标头应该是:

    应用程序/json;字符集=utf-8

    并且正确的内容类型标题设置在第 25 行:

    Map<String, String> jsonParams = new HashMap<String, String>();  
    jsonParams.put("param1", youParameter);
    
    JsonObjectRequest myRequest = new JsonObjectRequest(  
        Request.Method.POST,
        "https://your.url/here",
        new JSONObject(jsonParams),
    
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                verificationSuccess(response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                verificationFailed(error);
            }
        }) {
    
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", "application/json; charset=utf-8");
        headers.put("User-agent", "My useragent");
        return headers;
    }
    };
    MyApplication.getInstance().addToRequestQueue(myRequest, "tag"); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2013-05-13
      • 2016-08-12
      相关资源
      最近更新 更多