【发布时间】:2015-06-04 07:04:06
【问题描述】:
我通过 Web 服务器调用从 API 获取一些数据。如果我使用基本的网络调用(使用 HttpGet),我可以得到我期望的数据。但是通过使用 Volley Json,我得到了一个空数组 [] 作为响应。
我得到以下 jsonarray 响应。
[
{
"nickname":"panikos",
"username":"panikos@gmail.com",
"user_type":"LEADER",
"latest_steps":"2"
},
{
"nickname":"nikki",
"username":"nikki@gmail.com",
"user_type":"MASTER",
"latest_steps":"3"
},
...........
...........
...........
...........
]
这是我使用 volley 从服务器获取数据的代码
JsonArrayRequest arrReq = new JsonArrayRequest(lUrl, new
Response.Listener<JSONArray>()
{
public void onResponse(JSONArray arg0)
{
Log.d("debug","json Array"+arg0.toString());
mListener.notifyResponse(arg0.toString());
};
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError arg0) {
Log.d("debug", "Error Response"+arg0.toString());
if (arg0.networkResponse == null) {
if (arg0.getClass().equals(TimeoutError.class)) {
// Show timeout error message
mListener.notifyConnection("Oops.Timeout! Please check your connection.");
}
}else{
mListener.notifyError(arg0);
}
}
})
{
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
String creds = String.format("%s:%s",XippXX,XXcvXX);
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP);
params.put("Authorization", auth);
return params;
}
};
AppController.getInstance().adToRequestQure(arrReq);
每次我在凌空 Json 响应中得到一个空数组 [] 时都使用此代码。但是我对基本的 Http 调用(通过使用 Asynctask)进行了同样的尝试,它给出了我所期望的正确数据。
这是我通过普通网络请求调用获取数据的基本代码::
@Override
protected Void doInBackground(String... params) {
try {
HttpGet request=new HttpGet(params[0]);
DefaultHttpClient httpClient=new DefaultHttpClient();
String creds = String.format("%s:%s","XippXX","XXcvXX");
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.NO_WRAP);
request.setHeader("Authorization", auth);
HttpResponse response=httpClient.execute(request);
HttpEntity Entity=response.getEntity();
String jsondata = EntityUtils.toString(Entity);
Log.d("debug", "Json Data in Asynctask:: "+jsondata);
JSONArray lJsonArray=new JSONArray(jsondata);
Log.d("debug", "Json Array Data:: "+lJsonArray.toString());
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
这段代码运行良好.. 但我很高兴知道我在 Volley Json 中犯了什么错误?我尝试了太多的场景(我不能在这里展示),比如 StringRequest,还有一些其他的东西,比如 Base64.DEFAULT,但没有运气。
抱歉,英语很差,问题很长。任何人都可以指出我..谢谢!!!
【问题讨论】:
标签: android arrays json android-volley http-get