java.lang.Byte类型的值为91时无法转换为JSONObject

时间:2015-12-16 19:09:45

标签: java android retrofit

我收到以下错误:

  

org.json.JSONException:类型为java.lang.Byte的0的值91无法转换为JSONObject

这是因为这行代码:

JSONObject jObj = j.getJSONObject(i);

我正在执行GET请求,并将其记录在Android Studio中,如下所示:

jsonarray [91,109,111,100,101,108,46,83,116,111,114,101,64,52,57,57,54,102,97,56,44,32,109,111,100,101,108

在浏览器中,它看起来像这样:

链接到屏幕截图:http://i.imgur.com/NTpwbuB.png

我曾使用过JSONObject,因为我想稍后这样做:

String storeName = jObj.getString("STORE NAME");
String street = jObj.getString("STREET");
String city = jObj.getString("CITY");

以下是代码:

public void getSubprises() {
    Call<List<Store>> call = subpriseAPI.listStores();
    call.enqueue(new Callback<List<Store>>() {

        @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onResponse(Response<List<Store>> response, Retrofit retrofit) {
            try {
                JSONArray j = new JSONArray(response.body().toString().getBytes());
                System.out.println("jsonarray "+ j);
                for (int i = 0; i < j.length(); i++) {
                    JSONObject jObj = j.getJSONObject(i);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });
}

1 个答案:

答案 0 :(得分:1)

只需更改

 JSONArray j = new JSONArray(response.body().toString().getBytes());

 JSONArray j = new JSONArray(response.body().toString());

我认为这就是你想要做的。 如果这不起作用,那么你真的不知道响应体内部有什么,学习使用System.out.print函数来查看什么是response.body()。toString()打印。

如果它像

那样

[  {“STORE_NAME”:“abc”,“STREET”:“def”},{“STORE_NAME”:“asw”,“STREET”:“rew”} ]

一切都很顺利。否则你需要改变你获得jsonobject的方式。

编辑:

[“model.Store@4996fa8”,“model.Store@949eac1”,“model.Store@c45f266”,...

你在评论中写的这个输出让我意识到你不需要JSONArray或任何东西,Response&gt;响应已经有了Store对象。

查看该输出,response.body()返回List,

然后你可以这样做来获得输出

编辑2:

    java.util.Iterator it=response.body().iterator();
    while(it.hasNext())
         System.out.println(((Store)it.next()).getStreet());

以上代码仅在Store对象具有getStreet方法时才有效,如果不是,您可以使用st.street或st。然后按ctrl + space并在那里找到像街道一样的街道。