2016-03-01 2 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 показывает предметы, но не устанавливает правильные title и date внутри предметов.

И если я хранить внутри массива, и после этого, установив один внутри массива (для 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); 
      } 

на самом деле, я пытался что-то вы можете даже представить его и увидел любые вопросы по StackOverflow и я не мог не найти что-то вроде этого квеста, но один раз, просто показывая один элемент без правильных данных с объекта и один раз, не показывая правильные данные из этого Array.

Любая помощь будет отличной.

+0

что это строка 'MyRecyclerAdapter.java: 34'? – Blackbelt

+0

вот оно, 'feedListRowHolder.author.setText (Html.fromHtml (feedItem.getAuthor())); но я думаю, что дело не в этом, это происходит только тогда, когда я пытаюсь установить эту строку в два раза, как второй коды: '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

Смежные вопросы