使用FirestoreRecyclerView加载数据导致应用崩溃

时间:2019-01-08 10:36:13

标签: java android firebase google-cloud-firestore firebaseui

我试图使用FirestoreRecylerView从Cloud Firestore加载数据,但是每次我打开包含该视图的片段时,应用程序就会崩溃。我尝试查找,但找不到任何可以帮助我的东西。

PeerInfoRecylerAdapter.java

public class PeerInfoRecyclerAdapter extends  FirestoreRecyclerAdapter<UserInfo,PeerInfoRecyclerAdapter.MyViewHolder> {

public PeerInfoRecyclerAdapter(@NonNull FirestoreRecyclerOptions<UserInfo> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull UserInfo model) {
    holder.authorName.setText(model.getName());
    holder.authorRno.setText(model.getRno());
    holder.authorDept.setText(model.getDept());
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.peer_list_item_card, parent, false);
    return new MyViewHolder(itemView);
}

class MyViewHolder extends RecyclerView.ViewHolder{
    private TextView authorName,authorRno,authorDept;
    private MyViewHolder(View view)
    {
        super(view);
        authorName = (TextView) view.findViewById(R.id.peerAuthorText);
        authorRno = (TextView) view.findViewById(R.id.peerAuthorRno);
        authorDept= (TextView) view.findViewById(R.id.peerDept);
    }
}
@Override
public int getItemCount() {
    return 1;
}

}

FragmentDeptOther.java

public class FragmentDeptOther extends Fragment{
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference userRef = db.collection("users");
private PeerInfoRecyclerAdapter adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_dept_other,viewGroup, false);
    RecyclerView peerRecycler;
    peerRecycler = (RecyclerView) view.findViewById(R.id.peer_recyler);
    Query query = userRef;
    FirestoreRecyclerOptions<UserInfo> options = new FirestoreRecyclerOptions.Builder<UserInfo>()
        .setQuery(query,UserInfo.class).build();
    adapter = new PeerInfoRecyclerAdapter(options);
    peerRecycler.setHasFixedSize(true);
    peerRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
    peerRecycler.setAdapter(adapter);
    return view;
}
@Override
public void onStart() {
    adapter.startListening();
    super.onStart();
}

@Override
public void onStop() {
    adapter.stopListening();
    super.onStop();
}
}

Logcat 我不知道发生了什么。

01-08 16:29:13.795 19871-19871/com.example.root.makingit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.root.makingit, PID: 19871
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.get(ArrayList.java:437)
    at com.firebase.ui.common.BaseObservableSnapshotArray.getSnapshot(BaseObservableSnapshotArray.java:70)
    at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
    at com.firebase.ui.firestore.FirestoreRecyclerAdapter.getItem(FirestoreRecyclerAdapter.java:83)
    at com.firebase.ui.firestore.FirestoreRecyclerAdapter.onBindViewHolder(FirestoreRecyclerAdapter.java:125)
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
    at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
    at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)

1 个答案:

答案 0 :(得分:0)

问题在于,您的收藏集(FirestoreRecyclerOptions<UserInfo> options)为空,并且您在itemCount中返回了PeerInfoRecyclerAdapter的1。您需要做的就是删除PeerInfoRecyclerAdapter中的以下代码行(因为该类已经由FirestoreRecyclerAdapter实现了,您的类将从该代码实现):

@Override
public int getItemCount() 
{
    return 1;
}