我试图从我的API与Android得到响应。
我要做的是获得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?
提前感谢!
经过几个小时的调试和查看我的代码后,我发现我的问题是我在url的元素之间有一个空格。如下:
String url = "http://myIP/application/getNames/{"user":"user192", "password":"" + passwordText + ""}";
^
似乎Postman
应用程序不关心空间和调用API没有空间(因为从邮差的请求工作得很好),但当你试图从Android发送请求时,它考虑到空间,不修改url,它试图调用API作为url点。因此,在API中无法正常检索数据。
当你去掉那个空格时,它就像一个魅力。
注::正如@SomasundaramMahesh
指出的,我不得不使用StringRequest
而不是JsonArrayRequest
。我不明白为什么我必须改变它,因为我正在检索JSONArray
.