2017-03-28 107 views
0

我試圖用特定的newspaper_id查詢新聞節點中的最後一項。基本上我想總是通過使用新聞的id作爲查詢來獲得特定報紙的最新消息。查詢是在FirebaseRecyclerAdpter populateViewHolder()內完成的,我得到Firebase查詢Android

java.lang.ArrayIndexOutOfBoundsException:length = 0;指數= -1 在java.util.ArrayList.get(ArrayList.java:310) 在com.simpumind.e_tech_news.adapter.VendorNewAdapter $ 1.onDataChange(VendorNewAdapter.java:100)

{ 
    "news": { 
    "-HDRKDDGKSD56": { 
      "caption" : "Hail Mary", 
      "content" : "some contents" 
      "newspaper_id" : "-Kg9UvxyiuI4G3r6fCgU", 
      thumbnail: "some base64 encoded image" 
    }, 


"newspaper": { 
    "-Kg9UvxyiuI4G3r6fCgU" : { 
      "content_provider" : 1, 
      "cost" : "200", 
      "logo" : "some base64 encoded image" 
      "user": "The user" 
    } 
} 

這就是我試圖

@Override 
protected void populateViewHolder(final NewsPaperHolder viewHolder, NewsPaper model, int position) { 

    viewHolder.vendorName.setText(model.getPaper_name()); 

    mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("news"); 

    String oneChildRef = getRef(position).getKey(); 

    mDatabaseRef.orderByChild("newspaper_id") 
      .equalTo(oneChildRef) 
      .addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 


       List<News> newsList = new ArrayList(); 
       for (DataSnapshot d : dataSnapshot.getChildren()){ 
        News n = d.getValue(News.class); 
        newsList.add(n); 
       } 

      newsList.toString(); 

       News news = newsList.get(newsList.size() - 1); 
       updateUI(viewHolder, news); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 



    Picasso.with(context).load(model.getLogo()).into(viewHolder.vendorIcon); 
} 


public void updateUI(NewsPaperHolder holder, News news){ 

    holder.firstNewsTitle.setText(news.getCaption()); 
    Picasso.with(context).load(news.getThumbnail()).into(holder.firstNewsImage); 

} 

新聞

public class News { 

public String caption; 
public String content; 
public String newspaper_id; 
public String thumbnail; 
public String user; 


public News(){ 

} 

public News(String caption, String content, String newspaper_id, String thumbnail, String user) { 
    this.caption = caption; 
    this.content = content; 
    this.newspaper_id = newspaper_id; 
    this.thumbnail = thumbnail; 
    this.user = user; 
} 

public String getCaption() { 
    return caption; 
} 

public void setCaption(String caption) { 
    this.caption = caption; 
} 

public String getContent() { 
    return content; 
} 

public void setContent(String content) { 
    this.content = content; 
} 

public String getNewspaper_id() { 
    return newspaper_id; 
} 

public void setNewspaper_id(String newspaper_id) { 
    this.newspaper_id = newspaper_id; 
} 

    public String getThumbnail() { 
     return thumbnail; 
    } 

    public void setThumbnail(String thumbnail) { 
     this.thumbnail = thumbnail; 
    } 
} 

回答

0

當您的數據庫不包含任何子項時,可能會出現該錯誤。嘗試通過這種逃避它:

public void onDataChange(DataSnapshot dataSnapshot) { 
    ... 
    if (newsList.size() > 0) { 
     News news = newsList.get(newsList.size() - 1); 
     updateUI(viewHolder, news); 
    } 
} 

希望這有助於