Recyclerview 适配器:java.util.ArrayList 无法转换为 com.google.firebase.firestore.QuerySnapshot
Posted
技术标签:
【中文标题】Recyclerview 适配器:java.util.ArrayList 无法转换为 com.google.firebase.firestore.QuerySnapshot【英文标题】:Recyclerview Adapter: java.util.ArrayList cannot be cast to com.google.firebase.firestore.QuerySnapshot 【发布时间】:2021-03-24 02:44:02 【问题描述】:我是新手,不熟悉使用 recyclerview 适配器。我有这种方法可以将数据加载到 recyclerview 适配器中。将使用合并查询过滤数据。但是应用程序崩溃了,我得到了 java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.google.firebase.firestore.QuerySnapshot。有谁知道如何解决这个问题?
private void loadData()
if(modelArrayList.size()>0)
modelArrayList.clear();
storageReference = FirebaseStorage.getInstance().getReference();
Query query = collectionReference.whereArrayContains("pet", pettype);
Query query2 = collectionReference.whereArrayContains("service", "Pet Sitting");
Query query3 = collectionReference.whereArrayContains("petnum", petnumber);
Query query4 = collectionReference.whereArrayContains("region", reg);
Query query5 = collectionReference.whereArrayContains("subregion", subreg);
Task task = query.get();
Task task2 = query2.get();
Task task3 = query3.get();
Task task4 = query4.get();
Task task5 = query5.get();
Task combinedtask = Tasks.whenAllSuccess(task, task2, task3, task4, task5);
combinedtask.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task)
for(DocumentSnapshot querySnapshot: task.getResult())
model model = new model(querySnapshot.getString("firstname"),
querySnapshot.getString("lastname"),
querySnapshot.getString("description"),
querySnapshot.getString("userID"));
modelArrayList.add(model);
adapter = new My_recyclerview_adapter(Pet_sitting_result.this, modelArrayList);
recycler_view.setAdapter(adapter);
).addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
Toast.makeText(Pet_sitting_result.this, "Error", Toast.LENGTH_SHORT);
);
【问题讨论】:
【参考方案1】:由于您的combinedTask
是其他几个任务的结果,因此它将产生List
对象,而不是QuerySnapshot
。因此,您的成功回调应该声明它接受List<Task<?>>
而不是Task<QuerySnapshot>
。您传递给whenAllSuccess()
的每个任务的列表中都会有一项。您必须编写代码将每个查询的各个快照从列表中提取出来,并根据需要分别处理它们。
您可能想进一步熟悉您在此处使用的Tasks API,并研究Tasks.whenAll() 的API 文档。
【讨论】:
我不太了解拉单个快照部分。介意详细说明吗? 访问列表中的任务以获取每个查询的结果。它就像任何其他列表一样。 我不太确定结果是什么,但我正在尝试为所有查询创建一个 AND 运算符。例如,用户必须满足所有五个条件才能显示其数据。如果他们只满足以上是关于Recyclerview 适配器:java.util.ArrayList 无法转换为 com.google.firebase.firestore.QuerySnapshot的主要内容,如果未能解决你的问题,请参考以下文章
Fragment,RecyclerView:没有附加适配器;跳过布局
片段中的recyclerview的“RecyclerView:没有附加适配器;跳过布局”[重复]
RecyclerView 适配器中的 onBackPressed()
当调用 RecyclerView 适配器的“notifyDataSetChanged()”时,RecyclerView 抛出“java.lang.Throwable: addInArray”