2016-03-01 79 views
0
对象后,将其存储

我试图解析Json类似如下:如何解析的Android的JSONObject与JsonArray存储里面RecyclerView

 { 
     "status": "ok", 
     "feed": { 
     "title": "title1", 
     "link": "http://www.link/", 
     "author": "", 
     "description": "desc", 
     "image": "" 
     }, 
     "items": [ 
     { 
      "title": "something", 
      "link": "something", 
      "guid": "something", 
      "pubDate": "date", 
      "categories": [], 
      "author": "", 
      "thumbnail": "", 
      "description": null, 
      "content": null 
     }, 
... 
... 

而且我从response得到预期的结果,但是,这是不是point.Here是我做过什么:

try { 

      JSONObject response = new JSONObject(result); 

      JSONObject feed_object = response.getJSONObject("feed"); 
      PostItems item = new PostItems(); 
      item.setAuthor(feed_object.getString("title")); 

      JSONArray items_arr = response.getJSONArray("items"); 
      for (int i = 0; i < items_arr.length(); i++) { 
       JSONObject post = items_arr.getJSONObject(i); 

       item.setTitle(post.getString("title")); 
       item.setDate(post.getString("pubDate")); // As expected results 

       feedItem.add(item); 
      } 

     } 

的一点是,如果我存储(第一object像我这样做如上面的代码RecyclerView显示的项目,但没有在项目内设置正确的titledate

如果我将其存储在阵列内部和在此之后,设置一个阵列(对于array)内部和array外,它只是表示这样的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
       at java.io.StringReader.<init>(StringReader.java:47) 
       at android.text.HtmlToSpannedConverter.convert(Html.java:449) 
       at android.text.Html.fromHtml(Html.java:136) 
       at android.text.Html.fromHtml(Html.java:99) 
       at client.com.news.RecyclerViews.MainSanjeshRecyclerView.MyRecyclerAdapter.onBindViewHolder(MyRecyclerAdapter.java:34) 
       at client.com.news.RecyclerViews.MainSanjeshRecyclerView.MyRecyclerAdapter.onBindViewHolder(MyRecyclerAdapter.java:14) 
       at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5465) 
       at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5498) 
       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4735) 
       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4611) 
       at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988) 
       at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384) 
       at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347) 
       at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574) 
       at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3026) 
       at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2903) 
       at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3277) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:596) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1684) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:122) 
       at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) 
       at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1139) 
       at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:810) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) 
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) 
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) 
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) 
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
       at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
       at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) 
       at android.view.View.layout(View.java:16630) 
       at android.view.ViewGroup.layout(ViewGroup.java:5437) 
       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171) 
      at android.vi 

第二尝试:

try { 

       JSONObject response = new JSONObject(result); 

       JSONObject feed_object = response.getJSONObject("feed"); 
       PostItems item = new PostItems(); 
       item.setAuthor(feed_object.getString("title")); 

       JSONArray items_arr = response.getJSONArray("items"); 
       for (int i = 0; i < items_arr.length(); i++) { 
        JSONObject post = items_arr.getJSONObject(i); 
        PostItems item2 = new PostItems(); 
        item2.setTitle(post.getString("title")); 
        item2.setDate(post.getString("pubDate")); 

        feedItem.add(item2); 
       } 
       feedItem.add(item); 
      } 

其实,我已经尝试过什么,你甚至可以把它想象,看到计算器上的任何问题,我不能没有找到像这样的问题,但有一次,只显示一个项目没有来自对象的正确数据,一次没有显示来自Array的正确数据。

任何帮助将是伟大的。

+0

什么是行'MyRecyclerAdapter.java:34'? – Blackbelt

+0

这就是它,'feedListRowHolder.author.setText(Html.fromHtml(feedItem.getAuthor()));'但我认为这不是重点,这只是当我试图设置这条线两次llike第二代码:'feedItem.add(item2); feedItem.add(item);' – Mohsen

+0

'getAuthor'返回null。请注意:\t 'PostItems item = new PostItems();'应该在每个for循环的实例化处--blackbelt刚刚编辑 – Blackbelt

回答

1

您正在尝试在每个项目中使用getAuthor(),当它清晰地设置为ArrayList中的一个(第一个)项目时。当它没有任何价值时,它返回null,产生NullPointerException。每次迭代都应该创建一个新的对象。

只是移动

PostItems item = new PostItems(); 
item.setAuthor(feed_object.getString("title")); 

for循环。

编辑

try { 
    JSONObject response = new JSONObject(result); 

    JSONObject feed_object = response.getJSONObject("feed"); 

    JSONArray items_arr = response.getJSONArray("items"); 
    for (int i = 0; i < items_arr.length(); i++) { 
     JSONObject post = items_arr.getJSONObject(i); 
     PostItems item = new PostItems(); 
     item.setAuthor(feed_object.getString("title")); // being fetched from top node 
     item.setTitle(post.getString("title")); // being fetched from array 
     item.setDate(post.getString("pubDate")); // being fetched from array 

     feedItem.add(item); 
    } 

} 
+0

没有工作,这不是我在谈论实际,请阅读评论。 – Mohsen

+0

查看我的更新。错过了一条线。 – Rohit5k2

+0

请将您的代码与我的相匹配。试试这个代码。 – Rohit5k2