我有一个查询,看起来像这样:
Query first = ref.orderBy("name", Query.Direction.ASCENDING).limit(10);
这就是我将数据显示给我的方式RecyclerView
。
firestoreRecyclerOptions = new FirestoreRecyclerOptions.Builder<ModelClass>().setQuery(query, ModelClass.class).build();
myFirestoreRecyclerAdapter = new MyFirestoreRecyclerAdapter(firestoreRecyclerOptions);
recyclerView.setAdapter(myFirestoreRecyclerAdapter);
我正在尝试使用此处指定的分页,但无法解决。
first.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
DocumentSnapshot lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);
Query second = ref.orderBy("name", Query.Direction.ASCENDING).startAfter(lastVisible).limit(10);
//Create a firestoreRecyclerOptions and setting the adapter
}
});
有没有一种方法可以通过使用组合查询游标来对查询进行分页FirestoreRecyclerAdapter
?这有可能吗?
正如@FrankvanPuffelen在您之前的问题]中已经回答的那样,您无法实现这一点,因为在您的情况下,您应该将2个不同的查询(first
和second
)传递给单个适配器,而使用不能实现FirestoreRecyclerAdapter
。您可以将第一个查询或第二个查询与适配器的单个实例一起使用。
一种解决方案是创建两个不同的列表,包含每个查询的结果并将其组合。然后,您可以将结果列表传递给另一个html" target="_blank">适配器(假设为)ArrayAdapter
,然后将结果显示为ListView
,甚至更好地显示为RecyclerView
。在这种情况下,问题是您将无法使用FirestoreRecyclerAdapter
该类提供的实时功能,但是这种方法可以解决您的问题。
编辑:
根据您在注释部分的请求,我将为您提供一个示例,该示例如何使用a ListView
和an
以最简单的方式对按钮单击进行分页ArrayAdapter
。您也可以RecyclerView
在向下滚动时使用a来实现相同的目的。但是为了简单起见,假设我们有一个ListView
和一个Button
,并且希望在每次单击按钮时将更多项目加载到列表中。为此,让我们先定义视图:
ListView listView = findViewById(R.id.list_view);
Button button = findViewById(R.id.button);
假设我们有一个如下所示的数据库结构:
Firestore-root
|
--- products (collection)
|
--- productId (document)
|
--- productName: "Product Name"
还有一个模型类,如下所示:
public class ProductModel {
private String productName;
public ProductModel() {}
public ProductModel(String productName) {this.productName = productName;}
public String getProductName() {return productName;}
@Override
public String toString() { return productName; }
}
现在,让我们定义一个限制为的查询3
。
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference productsRef = rootRef.collection("products");
Query firstQuery = productsRef.orderBy("productName", Query.Direction.ASCENDING).limit(3);
也就是说,每点击一次按钮,我们就会再加载3个项目。现在,这是执行魔术的代码:
firstQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<ProductModel> list = new ArrayList<>();
for (DocumentSnapshot document : task.getResult()) {
ProductModel productModel = document.toObject(ProductModel.class);
list.add(productModel);
}
ArrayAdapter<ProductModel> arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Query nextQuery = productsRef.orderBy("productName", Query.Direction.ASCENDING).startAfter(lastVisible).limit(3);
nextQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> t) {
if (t.isSuccessful()) {
for (DocumentSnapshot d : t.getResult()) {
ProductModel productModel = d.toObject(ProductModel.class);
list.add(productModel);
}
arrayAdapter.notifyDataSetChanged();
lastVisible = t.getResult().getDocuments().get(t.getResult().size() - 1);
}
}
});
}
});
}
}
});
其中lastVisible
的一个DocumentSnapshot
对象代表查询中的最后一个可见项。在这种情况下,每三分之一并被声明为gloabl变量:
private DocumentSnapshot lastVisible;
Edit2: 在这里,您还具有关于如何从Firestore数据库中获取数据并RecyclerView
在用户滚动时以较小的块显示它们的解决方案。
我想在PHP中使用Elastic来处理来自我网站的搜索请求。例如,我有搜索参数 但是不应该总是搜索所有参数。 所以可能只有(< code >姓名和< code >年龄)有值,而(< code >身高和< code >体重)没有值。 有没有办法构建一个具有灵活/不断变化的输入值的查询? 当没有(和)的搜索值时,下面的查询将不起作用。
我试图运行查询的presto集群我有运行在dataproc-通过python(使用presto从pyhive)在我的本地机器上。但是我似乎不知道主机的网址。GCP dataproc是否允许远程访问presto集群? 我试着在Presto的网络用户界面上使用网址,但那也不起作用。我还检查了关于使用Python云客户端库的文档。也没什么帮助https://cloud.google.com/datapr
我正在用SpringBoot构建一个应用程序。我有一个存储库,我通过以下方式从方法名称创建查询: 这样的查询可以工作,方法调用的结果是具有该名称的用户。在Spring Boot中是否可以按名称创建查询,其中输入是名称列表,输出是用户列表,其中每个用户至少对应于列表中的一个名称?例如: 我也试过这样的方法,但是行不通。
我正在使用Jersey创建一个RESTful API,其中实现了一个ExceptionMapper类来捕获所有错误。 有没有办法从异常中获取查询字符串?或者实现PreparedStatement并在其中创建一个方法来获取查询字符串?
问题内容: 我正在使用GhostDriver的Java绑定对PhantomJS运行Selenium接受测试。 如果PhantomJS请求的网页之一通过console.log登录到Javascript控制台,是否可以捕获或查看这些消息? 我想这的答案很简单,但我无法解决! 问题答案:
问题内容: 假设我有一个SQL查询 它给我一些结果,例如 我可以放一个and子句来过滤结果 这给了我结果 该和被隐含一起编。 是否有类似的语法 给出结果 ? 我可以做 劣势: 这可能是低效率的,因为数据库必须计算两次该行,发现它是重复的,然后将其丢弃。 我也可以写 缺点: 乍看之下,它开始变得不那么容易理解了(可能是最坏的缺点)。 或者 缺点: 这将使数据库可以做很多额外的工作,将大量的非标签聚集