首页 > 解决方案 > 如何限制在 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) {做某事} 谢谢你们的帮助,顺便说一句我真的很感激它:))

标签: androidfirebase-realtime-database

解决方案


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

推荐阅读