2017-02-24 51 views
0

我试图通过php文件从远程database获取数据,并将内容输出到ListView容器中。当使用测试数据(填充字符串的数据和循环一个JSON对象的创建,然后添加每一个对象到JSONArray)一切工作正常。所以我知道,误差必须在下面的代码:针对排除php交互的不兼容JSON类型的接收错误

Response.Listener<String> responseListener = new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      try { 
       JSONObject jsonResponse = new JSONObject(response); 
       String name = jsonResponse.getString("name"); 
       String genreAddress = jsonResponse.getString("genreAddress"); 
       String blurb = jsonResponse.getString("blurb"); 

        try { 

         JSONObject newListEntity = new JSONObject(); 
         newListEntity.put("name", name); 
         newListEntity.put("genreAddress", genreAddress); 
         newListEntity.put("blurb", blurb); 

        jsonArray.put(newListEntity); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       ArrayList<GetDiscoverContent> getPanelContent = GetDiscoverContent.fromJSON(jsonArray); 
       DiscoverAdapter adapter = new DiscoverAdapter(getContext(), getPanelContent); 
       listView.setAdapter(adapter); 
      } catch(JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    DiscoverDbRequest dbReq = new DiscoverDbRequest(tableType, responseListener); 
    RequestQueue queue = Volley.newRequestQueue(getContext()); 
    queue.add(dbReq); 

下面是错误的logcat:

02-24 11:44:40.389 20391-20391/com.socialivemusic.socialivemusic 
W/System.err: org.json.JSONException: Value [] of type 
org.json.JSONArray cannot be converted to JSONObject 
    02-24 11:44:40.389 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at org.json.JSON.typeMismatch(JSON.java:111) 
    02-24 11:44:40.389 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:159) 
    02-24 11:44:40.399 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:172) 
    02-24 11:44:40.409 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.socialivemusic.socialivemusic.DiscoverFragment$1.onResponse(DiscoverFragment.java:96) 
    02-24 11:44:40.409 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.socialivemusic.socialivemusic.DiscoverFragment$1.onResponse(DiscoverFragment.java:92) 
    02-24 11:44:40.409 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 
    02-24 11:44:40.419 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 
    02-24 11:44:40.429 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
    02-24 11:44:40.429 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
android.os.Handler.handleCallback(Handler.java:733) 
    02-24 11:44:40.439 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
android.os.Handler.dispatchMessage(Handler.java:95) 
    02-24 11:44:40.439 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at android.os.Looper.loop(Looper.java:136) 
    02-24 11:44:40.439 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
android.app.ActivityThread.main(ActivityThread.java:5021) 
    02-24 11:44:40.449 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at java.lang.reflect.Method.invokeNative(Native 
Method) 
    02-24 11:44:40.449 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
    02-24 11:44:40.459 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
    02-24 11:44:40.459 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
    02-24 11:44:40.459 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
    02-24 11:44:41.069 20391-20391/com.socialivemusic.socialivemusic W/System.err: org.json.JSONException: Value [] of type 
org.json.JSONArray cannot be converted to JSONObject 
    02-24 11:44:41.089 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at org.json.JSON.typeMismatch(JSON.java:111) 
    02-24 11:44:41.089 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:159) 
    02-24 11:44:41.099 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:172) 
    02-24 11:44:41.099 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.socialivemusic.socialivemusic.DiscoverFragment$1.onResponse(DiscoverFragment.java:96) 
    02-24 11:44:41.109 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.socialivemusic.socialivemusic.DiscoverFragment$1.onResponse(DiscoverFragment.java:92) 
    02-24 11:44:41.109 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 
    02-24 11:44:41.109 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 
    02-24 11:44:41.119 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
    02-24 11:44:41.119 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
android.os.Handler.handleCallback(Handler.java:733) 
    02-24 11:44:41.129 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
android.os.Handler.dispatchMessage(Handler.java:95) 
    02-24 11:44:41.129 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at android.os.Looper.loop(Looper.java:136) 
    02-24 11:44:41.139 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
android.app.ActivityThread.main(ActivityThread.java:5021) 
    02-24 11:44:41.139 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at java.lang.reflect.Method.invokeNative(Native 
Method) 
    02-24 11:44:41.139 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
    02-24 11:44:41.149 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
    02-24 11:44:41.149 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
    02-24 11:44:41.159 20391-20391/com.socialivemusic.socialivemusic W/System.err:  at dalvik.system.NativeStart.main(Native Method) 

任何人都了解,我发现了错误?我在登录页面上有非常类似的代码,对我来说工作得很好。

+0

某处你传递一个JSONArray,而不是一个JSONObject – JCoder

+1

你能张贴JSON你得到的样本?我想你会得到一个空的json数组,但是一个样本可以帮助更好地查明问题。 –

+0

此方法'GetDiscoverContent.fromJSON(JSONArray),其中'并不实际上要求JSONArray或JSONObject的? – JCoder

回答

0

System.err: at org.json.JSONObject.<init>()

可能发生错误的唯一地方。

JSONObject jsonResponse = new JSONObject(response); 

错误消息

JSONArray cannot be converted to JSONObject

所以..解析为JSONArray

JSONArray jsonResponse = new JSONArray(response); 

还是...使用截击JSONArrayRequest类

建议:使用改进,以适应一次处理您的HTTP请求和JSON转换