2016-01-08 29 views
0

This是我的API和here is the POJO to the JSON
我想知道如何使用Volley存储JSON对象。使用Volley存储JsonObject

这里是我到目前为止的代码:

JsonArrayRequest TweetReq = new JsonArrayRequest(URL1, 
      new Response.Listener<JSONArray>() 
{ 
    @Override 
    public void onResponse(JSONArray response) { 
     Log.d("WORKING RESPONSE:::::", response.toString()); 
     //hidePDialog(); 

     SharedPreferences Tempx = getSharedPreferences("ActivitySession", Context.MODE_PRIVATE); 
     SharedPreferences.Editor edx = Tempx.edit(); 
     edx.putString("GSON_FEED", response.toString()); 
     edx.apply(); 

     Gson gson = new Gson(); 
     JsonParser parser = new JsonParser(); 
     JsonArray jArray = parser.parse(Tempx.getString("GSON_FEED","")).getAsJsonArray(); 

     //ArrayList<MainPojo> uid = new ArrayList<MainPojo>(); 

     for(JsonElement obj : jArray) 
     { 
      MainPojo cse = gson.fromJson(obj , MainPojo.class); 
      TweetList.add(cse); 
     } 
     mAdapter.notifyDataSetChanged(); 

     // Parsing json 

    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) 
    { 
     SharedPreferences Tempx = getSharedPreferences("ActivitySession", Context.MODE_PRIVATE); 

     try{ 
      Gson gson = new Gson(); 
      JsonParser parser = new JsonParser(); 
      JsonArray jArray = parser.parse(Tempx.getString("GSON_FEED","")).getAsJsonArray(); 

      for(JsonElement obj : jArray) 
      { 
       MainPojo cse = gson.fromJson(obj , MainPojo.class); 
       TweetList.add(cse); 
      } 
      mAdapter.notifyDataSetChanged(); 

      VolleyLog.d("EDUKNOW::::", "Error: " + error.getMessage()); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     //hidePDialog(); 
    } 
}); 

这将返回IllegalStateException说:This is not a JSON Array, 这是有道理的,但我怎么将它存储就像一个Object

EDIT1 增加了logcat。

01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err: java.lang.IllegalStateException: This is not a JSON Array. 
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err:  at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:106) 
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err:  at com.fossasia.loklak.Activities.MainActivity$2.onErrorResponse(MainActivity.java:105) 
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err:  at com.android.volley.Request.deliverError(Request.java:564) 
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err:  at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101) 
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err:  at android.os.Looper.loop(Looper.java:148) 
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

的JSONObject。最好的办法是使用像杰克逊或莫氏解析库 –

+0

因为响应是一个JSONObject,所以你应该使用JsonObjectRequest而不是JsonArrayRequest。 – BNK

回答

-1
try{ 
    JsonArray jArray = parser.parse(Tempx.getString("GSON_FEED","")).getAsJsonArray(); 
    for(JsonElement obj : jArray) 
    { 
     MainPojo cse = gson.fromJson(obj , MainPojo.class); 
     TweetList.add(cse); 
    } 
}catch(Throwable e) { 

    JsonElement obj = parser.parse(Tempx.getString("GSON_FEED","")).getAsJsonObject(); 
    MainPojo cse = gson.fromJson(obj , MainPojo.class); 
    TweetList.add(cse); 

} 
+0

但'onErrorResponse()'是默认加载的,因为我猜这是一个JSON对象,所以,从字面上看,这会有什么区别? – OBX

+0

Plz发布完成错误日志。 –

+0

我编辑了问题 – OBX