Firebase查询Android

Firebase查询Android,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我试图用特定的报纸id查询新闻节点中的最后一项。基本上,我希望总是使用新闻id作为查询来获取特定报纸的最后一条新闻。查询是在FirebaseRecyclerAddter populateViewHolder()中完成的,我得到 java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=-1 获取(ArrayList.java:310) 在com.simpumind.e_tech_news.adapter.VendorNewAdapter$1.onDataC

我试图用特定的报纸id查询新闻节点中的最后一项。基本上,我希望总是使用新闻id作为查询来获取特定报纸的最后一条新闻。查询是在FirebaseRecyclerAddter populateViewHolder()中完成的,我得到

java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=-1 获取(ArrayList.java:310) 在com.simpumind.e_tech_news.adapter.VendorNewAdapter$1.onDataChange(VendorNewAdapter.java:100)

这就是我所尝试的

@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 void onDataChange(DataSnapshot dataSnapshot) {
    ...
    if (newsList.size() > 0) {
        News news = newsList.get(newsList.size() - 1);
        updateUI(viewHolder, news);
    }
}
希望这有帮助

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