我正在尝试拉出一个JSON数组并将其加载到RecyclerView中。这是代码:
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();
}
}
});
如您所见,我将结果存储到SharedPreferences中并填充它!
然而,当我执行它时,onErrorResponse()
一直在执行,
这是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: atcom.google.gson.JsonElement.getAsJsonArray(JsonElement.java:106)
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err: atcom.fossasia.loklak.Activities.MainActivity$2.onErrorResponse(MainActivity.java:105)
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err: atcom.android.volley.Request.deliverError(Request.java:564)
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err: atcom.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101)
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err: atandroid.os.Handler.handleCallback(Handler.java:739)
01-08 20:01:08.688 4764-4764/com.fossasia.loklak W/System.err: atandroid.os.Handler.dispatchMessage(Handler.java:95)
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err: atandroid.os.Looper.loop(Looper.java:148)
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err: atandroid.app.ActivityThread.main(ActivityThread.java:5417)
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err: atjava.lang.reflect.Method.invoke(Native Method)
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err: atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-08 20:01:08.689 4764-4764/com.fossasia.loklak W/System.err: atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
他第一个错误,这不是一个JSON数组,我猜是因为它试图从最初为空的sharedPreferences加载。
我的问题是:这是由于API中的任何问题或我定义我的POJO的方式吗?
答案 0 :(得分:1)
我认为问题在于您的POJO实施。我从http://loklak.org/api/search.json?q=apple
答案不是JSON Array
,而是JSON Object
。看到回复的开头?它以大括号{
开头,标记对象的开头。我建议你在JSON documentation上阅读一下。
为了获得JSON Array
,您需要检查JSON的结构。我将JSON响应复制粘贴到在线JSON格式化程序中,我可以看到有7个对象,其中一个包含您需要的JSON Array
。如果您设法将JSON Object
作为JSON Array
,那么您就可以使用它。
JSONArrayRequest
更改为JSONObjectRequest
JSONArray
内获取JSONObject
(在这种情况下,密钥为"statuses"
,值为JSONArray
)祝你好运