【问题标题】:Loading data using FirestoreRecyclerView crashing the app使用 Firestore RecyclerView 加载数据会使应用程序崩溃
【发布时间】:2019-01-08 10:36:13
【问题描述】:

我正在尝试使用 FirestoreRecylerView 从云 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)

【问题讨论】:

  • 发布您的堆栈跟踪
  • 如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。也请回复@AlexMamo
  • @AlexMamo 我添加了 Logcat 日志。

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


【解决方案1】:

问题是,您的集合 (FirestoreRecyclerOptions&lt;UserInfo&gt; options) 是空的,并且您在 PeerInfoRecyclerAdapter 中返回 1 的 itemCount。您需要做的就是删除PeerInfoRecyclerAdapter 中的以下代码行(因为它已经由您的类扩展的FirestoreRecyclerAdapter 实现):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2015-04-24
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多