【问题标题】:Post Json Data using volly library to wcf rest service使用 volley 库将 Json 数据发布到 wcf 休息服务
【发布时间】:2015-02-14 19:30:33
【问题描述】:

我正在从 asynctask 迁移到 volley。在我的应用程序中,我想要来自我的 WCF REST 服务的 json 数据。我的代码如下

StringRequest postRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // response
                    Log.d("Response", response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // TODO Auto-generated method stub
                    if(error.networkResponse != null && error.networkResponse.data != null){
                        VolleyError error2 = new VolleyError(new String(error.networkResponse.data));
                        error = error;
                    }
                    Log.d("ERROR", "error => " + error.toString());
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String>  params1 = new HashMap<>();
            params1.put("userid", "123");
            params1.put("password", "123");
            return params1;
        }
        @Override
        public Map<String, String> getHeaders() {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            return headers;
        }
    } ;

但我收到来自 WCF 服务的错​​误“HTTP 错误 400。请求的标头名称无效”...

【问题讨论】:

  • “请求的标头名称无效”我认为服务器不会期望 application/json 也许它想要 application/x-www-form-urlencoded 或其他东西所以尽量不要发送任何标头。
  • 使用 google chrome 网络分析器或 fiddler 查看 http 消息。这可以帮助您了解问题所在。
  • mmlooloo 先生,我都试过了,但仍然出现错误 400...
  • sir rafa,我在 fiddler 和 restclient 中看到过..都给了我我期望的 json

标签: c# android json wcf rest


【解决方案1】:

抱歉回复晚了。WCF Rest 服务存在一些问题,它会给出反斜杠编码的 JSON,所以 volley 没有得到 JSON 内容类型

【讨论】:

    【解决方案2】:

    试试这个

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            url, params,
            new Response.Listener<JSONObject>() {
    
                @Override
                public void onResponse(JSONObject response) {
                   JSONObject mainObject = new JSONObject(response.toString());
                   JSONObject uniObject = mainObject.getJSONObject("yourObjectName");
                }
            }, new Response.ErrorListener() {
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                }
            }) {
    
        /**
         * Passing some request headers
         * */
        @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");
            return headers;
        }
    
    };
    

    【讨论】:

    • 感谢您的回复先生选择了字符串请求...
    • 你需要将字符串解析为 JSON
    • 无响应先生..与往常一样的错误..java.lang.String 无法转换为 JSONObject
    • yourObject.toString();
    • 我在 onresponse 方法中设置了断点...但它没有去那里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多