我正在学习Volley,但不知道为什么GET方法的响应会以单个字符的形式出现-> [。
我正在使用此方法获取JSON响应:
public void getJsonMethod() {
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(context);
// String url = "https://www.w3schools.com/js/myTutorials.txt";
String url = "http://www.google.com"; // with this url I am getting response
// Request a string response from the provided URL.
final StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println("Response is: " + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("Response is not good" + error.getMessage());
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
当我使用this link时,我确实得到了响应,但是当我尝试使用一些仅包含JSON like this one的链接时,我的响应为“ [”。
我正在从Activity中调用此方法,如下所示:
GetJsonClass getJson = new GetJsonClass(this);
getJson.getJsonMethod();
关于我在这里做错什么的任何想法吗?
如果有人会开始使用Volley,也许这可以帮助他:
David Lacroix 在他的回答中说,我叫stringRequest
而不是JsonArrayRequest
。
这是应该的样子:
public void getJsonMethod() {
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(context);
String url = "your url";
JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
System.out.println("this is response good" + response);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("this is response bad" + error);
}
});
queue.add(jsonObjectRequest);
}
答案 0 :(得分:1)
myTutorials.txt的状态代码为304
(也没有正确的后缀和MIME类型):
304未修改。如果客户端已经执行了有条件的GET请求,并且允许访问,但是文档没有被修改,则服务器应该以该状态码响应。 304响应必须不包含消息正文,因此总是由标头字段之后的第一个空行终止。
换句话说,浏览器可能显示的内容不一定与服务器发送的内容相同。例如。 GSON
仅在启用选项lenient的情况下接受JSON
,因为该数组没有名称。
请参见RFC 2616。
答案 1 :(得分:1)
请参见https://developer.android.com/training/volley/request
StringRequest。指定一个URL并接收一个原始字符串作为响应。有关示例,请参见设置请求队列。 JsonObjectRequest和JsonArrayRequest(JsonRequest的两个子类)。指定一个URL并分别获取一个JSON对象或数组作为响应。
您应该使用JsonArrayRequest