我正在尝试通过Android获取API的响应。
我要做的是将JSONArray
作为我的API的回复,但我收到以下错误:
java.lang.String类型的值错误无法转换为JSONArray
我从API发送的回复是:
[
{
"name1":"Peter",
"name2":"Andrew"
}
]
这是我用来从Android检索它的代码:
JsonArrayRequest JsonRequest = new JsonArrayRequest (Request.Method.GET, url, null, new Response.Listener<JSONArray>()
{
@Override public void onResponse(JSONArray response) {
if(response!=null){
Toast.makeText(getApplicationContext(), "Data has been sent correctly.", Toast.LENGTH_LONG).show();
finish();
}else{
}
}
}, new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
});
但它总是进入错误块。
我知道有很多与此错误相关的问题,但大多数问题都与错误的JSON创建有关。我认为这不是问题,因为我创建它是因为JsonArray是在Java中创建的,但在这种情况下,数组上只有一个元素(而不是两个,作为javadocs上的示例)。
如果我已经在使用JSONArray,我该如何避免出现此错误?
提前致谢!
答案 0 :(得分:0)
经过几个小时的调试并查看我的代码,我发现我的问题是我在url上的元素之间有一个空格。如下:
String url = "http://myIP/application/getNames/{\"user\":\"user192\", \"password\":\"" + passwordText + "\"}";
^
似乎Postman
应用程序不关心该空间并且在没有空格的情况下调用API(因为从Postman请求运行良好)但是当您尝试从Android发送请求时它考虑到了空间并且不修改url,它会尝试将API作为url点调用。因此,通常不会在API中检索数据。
当你移除那个空间时,它就像一个魅力。
P.S。:正如@SomasundaramMahesh
指出的那样,我必须使用StringRequest
代替JsonArrayRequest
。我无法理解为什么我必须更改它,因为我正在检索JSONArray
。