API URL 不能在 volley 中工作并且在浏览器 url 中工作

Posted

技术标签:

【中文标题】API URL 不能在 volley 中工作并且在浏览器 url 中工作【英文标题】:API URL not working in volley and working in browser url hit 【发布时间】: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 是实际的,并且可以正常工作。

【问题讨论】:

【参考方案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());
    
);

【讨论】:

以上是关于API URL 不能在 volley 中工作并且在浏览器 url 中工作的主要内容,如果未能解决你的问题,请参考以下文章

nextjs POST API 不能在实时环境中工作,但在本地环境中工作完美

img src 不能在 Vue js 中工作并且必须有正确的路径?

为啥在 Web 浏览器中工作的 url 没有在 UIImageview 中加载

为啥Bootstrap datepicker不能在ajax成功功能中工作[重复]

为啥 Task.Delay 不能在 Azure Function App 中工作?

为啥 VStack 不能在带有滚动视图的 GeometryReader 中工作?