【问题标题】:API URL not working in volley and working in browser url hitAPI URL 不能在 volley 中工作并且在浏览器 url 中工作
【发布时间】:2018-05-23 17:58:27
【问题描述】:

网址示例 = http://webapi.example.com/api/order?data={...list[{...},{...}]}

 GsonRequest request = new GsonRequest<OrderResponse>("URL example", null,
            OrderResponse.class, null, new Response.Listener<OrderResponse>() {
        @Override
        public void onResponse(OrderResponse response) {
            if (response.isSuccess()) {
                //sendNotification();
            } else {
                Toast.makeText(DeliveryManagementActivity.this, "Error in Server", Toast.LENGTH_SHORT).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.e("Error: " + error.getMessage());
        }
    });

对于上面的代码,我收到 400 错误。

GsonRequest request = new GsonRequest<OrderResponse>(UrlConstants.SEND_ORDERS_URL, getParams(),
            OrderResponse.class, header, new Response.Listener<OrderResponse>() {
        @Override
        public void onResponse(OrderResponse response) {
            if (response.isSuccess()) {
                sendNotification();
            } else {
                Toast.makeText(DeliveryManagementActivity.this, "Error in Server", Toast.LENGTH_SHORT).show();
            }
            hideLoader();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
            VolleyLog.e("Error: " + error.getMessage());
            Toast.makeText(DeliveryManagementActivity.this, "Error " + error.getMessage(), Toast.LENGTH_SHORT).show();
            hideLoader();
        }
    });

public Map<String, String> getHeaders() throws AuthFailureError {
    HashMap<String, String> headers = new HashMap<String, String>();
    headers.put("Content-Type", "application/json");
    return headers;
}

private Map<String, String> getParams() {
    Map<String, String> params = new HashMap<String, String>();
    params.put("orderData", requestData.getOrderRequest(requestData));

    return params;
}

对于上述情况,我总是从服务器收到错误的错误响应。我从第一个请求方法复制了请求,并使用浏览器 url 来访问 API。效果很好。

已编辑:

更改为第二种方式后,请求如下所示。

url = www.url.com/addOrder.php?

参数 = {"orderData":"{\"deliveryTime\":\"2017-12-10 01:13:00\",\"orderDetail\":[{\" courseId\":\"1\",\"foodQuantity\":\"2\",\"offer_id\":\"-1\",\"type\":\"1\"}],\ "userID\":\"7\",\"userLocation\":\"17\"}"}

orderData 也在 json 中解析,但缺少 =。是不是这个问题。问题顶部的 url 是实际的,并且可以正常工作。

【问题讨论】:

    标签: php android json web-services android-volley


    【解决方案1】:

    查询参数名称是orderData吗? url 中使用的查询参数是 data。 其他代码看起来没问题。

    【讨论】:

    • 如果您可以发布错误消息,这将有助于调试问题。还有一个问题是代码 sn-p 是否都抛出 400?
    【解决方案2】:

    对网址进行编码后,问题得到解决。

     try {
            param = URLEncoder.encode("json", "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    
    String url = baseUrl + params;
    
     GsonRequest request = new GsonRequest<OrderResponse>(url, null,
            OrderResponse.class, null, new Response.Listener<OrderResponse>() {
        @Override
        public void onResponse(OrderResponse response) {
            if (response.isSuccess()) {
                //sendNotification();
            } else {
                Toast.makeText(DeliveryManagementActivity.this, "Error in Server", Toast.LENGTH_SHORT).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.e("Error: " + error.getMessage());
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 2017-03-06
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多