问题描述
我在Android中使用Volley调用网络服务.我的日志中有以下错误
I call a webservice using Volley in android. I have the following error in the log
D/libc-netbsd: [getaddrinfo]: hostname=192.168.66.86; servname=(null); cache_mode=(null), netid=0; mark=0
D/libc-netbsd: [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
D/libc-netbsd: [getaddrinfo]: hostname=192.168.66.86; servname=(null); cache_mode=(null), netid=0; mark=0
D/libc-netbsd: [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
I/System.out: [CDS]rx timeout:2500
I/System.out: [socket][2] connection /123.231.66.86:8080;LocalPort=56586(2500)
I/System.out: [CDS]connect[/192.168.66.86:8080] tm:2
I/System.out: [socket][/192.168.8.104:56586] connected
I/System.out: [OkHttp] sendRequest>>
I/System.out: OkBuffer write source.head == null !
I/System.out: [OkHttp] sendRequest<<
I/System.out: Close in OkHttp:0
I/System.out: [CDS]close[56586]
E/Volley: [2259] BasicNetwork.performRequest: Unexpected response code 400 for http://192.168.66.86:8080/jlrloyalty/rest/usr/login
D/Volley: [1] 2.onErrorResponse: JsonRequestActivity
我的代码就是这样
private void makeJsonObjReq() {
showProgressDialog();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
Const.URL_STRING_REQ, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
msgResponse.setText(response.toString());
hideProgressDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hideProgressDialog();
}
}) {
/**
* 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");
return headers;
}
@Override
public byte[] getBody() {
return super.getBody();
}
@Override
protected Map<String, String> getParams() {
Gson gson = new Gson();
LoginAccount loginAccount = new LoginAccount();
HTTPWebServiceRequest httpWebServiceRequest = new HTTPWebServiceRequest();
loginAccount.setUsername("neshan");
loginAccount.setPassword("123456");
httpWebServiceRequest.setRequestObject(loginAccount);
String jsonParam = gson.toJson(loginAccount);
Map<String, String> params = new HashMap<String, String>();
params.put("requestObject", jsonParam);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq,
tag_json_obj);
但是当我使用以下参数从Postman调用此网址时,它会起作用.
But when I call this url from Postman with following parameters it works.
{"requestObject":{"password":"123456","username":"neshan","loginId":0}}
当我调试代码时,两个请求参数都相同.内容类型为application/json
.但是,这是怎么回事?有任何线索吗?
when I debug the code both the request params are same. The content type is application/json
. But what going on here? Any clue?
推荐答案
在排球比赛中,您拥有独立的成功和错误侦听器,处理错误侦听器块中的所有错误.
In volley you have separate success and error listeners, handle all the errors in the error listener block.
显示一个警报或大约一个警报,您可以在其中为用户显示适当的消息,以便通知他有错误,并且需要重试.
Display a alert or so in which you can show a proper message for user, so that he gets notified that there was an error and he needs to try again.
否则,如果您出于特定原因使用自定义错误代码,则可以通过创建实现截距的Response.ErrorListener的自己的错误侦听器来全局处理该错误代码.
Or else if you are using custom error code for specific reason you can handle that globally by creating your own error listeners which implements volley's Response.ErrorListener.
Google广义上的排球错误处理",您将获得一些参考.
Google "volley error handling generalized" you will get some references.
这篇关于Android Volley BasicNetwork.performRequest:URL的意外响应代码400的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!