android - 如何限制在 Firebase 实时 Android Studio 上检索数据
问题描述
我想问一下如何限制在 Android Firebase 中检索数据。这是我的代码:
private void lookingforHelp(){
DatabaseReference dbref = FirebaseDatabase.getInstance().getReference("Locations");
dbref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()){
int limitUser = 0;
ModelUsersLocation mUserLoct = ds.getValue(ModelUsersLocation.class);
LatLng yourLatLng = new LatLng(latitude_user, longitude_user);
LatLng polisiLatLng = new LatLng(mUserLoct.getLatitude(), mUserLoct.getLongitude());
if (mUserLoct.getPengguna().equals("polisi")){
if (SphericalUtil.computeDistanceBetween(yourLatLng, polisiLatLng) < 700) {
if (limitUser <= 5){
if (mUserLoct.getJangkauan().isEmpty()) {
DatabaseReference dbref = FirebaseDatabase.getInstance().getReference("Locations").child(mUserLoct.getUser().getUid());
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("jangkauan", fuser.getUid());
dbref.updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
writeNewOrder();
}
});
}
}
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
我试图检索我想要的数据只有少于 5 个用户,使用 int limitUser = 0; 并且它仍然无法仅检索少于 5 个用户的数据。
问题已解决,我尝试创建标记选项并将其设为不可见,然后将其添加到数组列表中,如果 (markers.size() <= 5) {做某事} 谢谢你们的帮助,顺便说一句我真的很感激它:))
解决方案
public MutableLiveData<ArrayList<Vendor>> getVendorsByLimit(int limit) {
ArrayList<Vendor> arrayList = new ArrayList<>();
Query query = FirebaseDatabase.getInstance().getReference().child("VENDOR_NODE").limitToLast(limit);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getChildrenCount() > 0) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (snapshot.getChildrenCount() > 0) {
//String value = (String) snapshot.getValue(); //Get all child data
//OR
//String singleValue = (String) snapshot.child("fullName").getValue(); //Get single child data
Vendor model = snapshot.getValue(Vendor.class);
String key = snapshot.getKey();
arrayList.add(model);
}
}
data.setValue(arrayList);
} else {
data.setValue(null);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e(TAG, "" + databaseError.getMessage());
data.setValue(null);
}
});
}
Query query = FirebaseDatabase.getInstance().getReference().child("VENDOR_NODE").limitToLast(limit);
You can sort them by using timeStamp like
-----------------------------------------
FirebaseDatabase.getInstance().getReference()
.child("Conversation").child(conversationID)
.limitToLast(100)
.orderByChild("timestamp")
.startAt(dateToStart) // pass timestamp from when you want to start filtering
.endAt(dateToEnd); // pass timestamp till when you want to apply filtering
推荐阅读
- sql - 如何加入表格并根据最新日期和另外两列中的条件显示列?
- merge - 如何根据字典变量名的正则表达式将多个字典变量组合成一个数组
- google-cloud-platform - Cloud Data Fusion storagebucketslist 权限问题
- r - 为什么 R grepl 函数中的上界大括号会再找到一个重复的标记?
- coq - 宇宙与 sumbool 不一致
- excel - Power Query - 从同一文件夹中提取的附加查询 - 只需 1 个查询即可在新文件上运行
- string - Duval 算法如何处理奇数长度的字符串?
- python - 删除所有 python 包,无论它们是如何安装的
- maxima - 最大值(macsyma):KKT条件
- fiware - 在 CentOS (FIWARE) 中下载和安装 Java JDK 时出错