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成功功能中工作[重复]