从firebase

时间:2018-02-13 14:12:12

标签: android firebase firebase-realtime-database

  

我需要检索reportedAt =“moka”&& name =   “chickungunya”。如附加的firebase屏幕截图所示

请帮忙

 //Filter markers by disease
disease = String.valueOf(spnDisease.getSelectedItem()).toLowerCase();
location = String.valueOf(spnLocation.getSelectedItem()).toLowerCase();

Query dbQuery = FirebaseDatabase.getInstance().getReference().child("diseaseReported").orderByChild("name").equalTo(disease);
dbQuery.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        Log.d("v1", dataSnapshot.toString());
        Map m = dataSnapshot.getValue(Map.class);
        double lat = m.getLat();
        double lng = m.getLng();
        String reportedAt = m.getReportedAt();
        String reportedOn = m.getReportedOn();
        String name = m.getName();
        String snippetText = "Reported on: " + reportedOn;
        LatLng c = new LatLng(lat, lng);

        mMap.addMarker(new MarkerOptions().position(c).title("Disease reported: " + name).snippet(snippetText).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

        }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

Firebase screenshot

2 个答案:

答案 0 :(得分:1)

在firebase中,您无法查询两条独立的数据信息。您必须在数据库中创建另一个标题为"name_reportedAt"的密钥,其中包含数据"chickungunya_moka"。然后你可以直接查询。

答案 1 :(得分:1)

firebase realtime database中不允许使用这些类型的查询。顺便说一句,您可以将firestore用于多个查询位置。

如果您想坚持使用firebase实时数据库,那么您应该使用您的数据模型并创建组合键来搜索和执行AND操作。

例如,要执行AND操作,您需要创建一个键

  

“name_createdAt”=“chickungunya_moka”

然后查询

orderByChild("name_reportedAt").equalsTo(name+"_"+reportedAt);