"类型java.lang.String的值错误无法转换为JSONArray" Android

时间:2016-09-28 15:54:54

标签: android json

我正在尝试通过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,我该如何避免出现此错误?

提前致谢!

1 个答案:

答案 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