Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android firebase获取等于索引的事件_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android firebase获取等于索引的事件

Android firebase获取等于索引的事件,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,如何获取所有事件并检查index=-L61MIZORBalbOLJBBSk 然后获取值(“拥有”): 我试过这个,但没用 string eventkey =-L61MIZORBalbOLJBBSk final String eventkey = ds.child("key").getValue(String.class); Query query1 = FirebaseDatabase.getInstance().getReference()

如何获取所有事件并检查
index=-L61MIZORBalbOLJBBSk
然后获取值(“拥有”):

我试过这个,但没用

string eventkey =-L61MIZORBalbOLJBBSk 


final String eventkey = ds.child("key").getValue(String.class);

Query query1 = FirebaseDatabase.getInstance().getReference()
                               .child("users")
                               .orderByChild("userid")
                               .equalTo(userid);
                         query1.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot ds) {
        Log.e("eventvalue", "" + ds.child("events").getValue());

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("userserror", "" + databaseError);
    }
});

对不起,我的英语不好。

以下代码行:

ds.child("events").getValue()
返回一个
映射
。所以你需要做的就是在地图上迭代。请参阅以下代码:

Query query1 = FirebaseDatabase.getInstance().getReference()
                   .child("users")
                   .orderByChild("userid")
                   .equalTo(userid);
             query1.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot ds) {
        Map<String, Object> map = (Map<String, Object>) ds.child("events").getValue();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            if(entry.getKey().equals(eventkey() {
                Log.e("TAG", entry.getKey());
            }
        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("userserror", "" + databaseError);
    }
});
Query query1=FirebaseDatabase.getInstance().getReference()
.child(“用户”)
.orderByChild(“用户ID”)
.equalTo(用户ID);
query1.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共无效onDataChange(DataSnapshot ds){
Map Map=(Map)ds.child(“事件”).getValue();
对于(Map.Entry:Map.entrySet()){
如果(entry.getKey().equals)(eventkey()){
Log.e(“TAG”,entry.getKey());
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.e(“userserror”,“数据库错误”);
}
});

以下代码行:

ds.child("events").getValue()
返回一个
映射
。因此,您只需在映射上迭代即可。请参阅以下代码:

Query query1 = FirebaseDatabase.getInstance().getReference()
                   .child("users")
                   .orderByChild("userid")
                   .equalTo(userid);
             query1.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot ds) {
        Map<String, Object> map = (Map<String, Object>) ds.child("events").getValue();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            if(entry.getKey().equals(eventkey() {
                Log.e("TAG", entry.getKey());
            }
        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("userserror", "" + databaseError);
    }
});
Query query1=FirebaseDatabase.getInstance().getReference()
.child(“用户”)
.orderByChild(“用户ID”)
.equalTo(用户ID);
query1.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共无效onDataChange(DataSnapshot ds){
Map Map=(Map)ds.child(“事件”).getValue();
对于(Map.Entry:Map.entrySet()){
如果(entry.getKey().equals)(eventkey()){
Log.e(“TAG”,entry.getKey());
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.e(“userserror”,“数据库错误”);
}
});

对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表

因此,
onDataChange
中的代码需要通过循环
DataSnapshot.getChildren()
来处理这些多个子项:

替代数据结构

也要考虑一下你的数据结构是否是你现在使用的最好的。你有一个列表“<代码>用户< /C>”,每个用户都有一个唯一的被标识为“代码> USERID < /代码>。而不是在推送ID下存储每个用户,我建议将每个用户存储在他们的<代码> USERID < /代码>下。 在代码中,您现在可能使用以下内容存储用户:

DatabaseReference ref = FirebaseDatbase.getInstance().getReference("users");
ref.push().setValue(user);
要获得我推荐的结构,请将其存储为:

ref.child(user.getUserid()).setValue(user);
现在,每个用户都直接存储在其
用户ID
下。这意味着如果您知道
用户ID
,则无需查询即可查找该用户。您的代码变成:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference()
                               .child("users")
                               .child(userid);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot ds) {
        Log.e("eventvalue", "" + ds.child("events").getValue());

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("userserror", "" + databaseError);
    }
});
Node查询中缺少
onDataChange
循环,更重要的是,查询中缺少
orderByChild().equalTo()
。这只是一个直接查找,它:

  • 更容易编码
  • 自动意味着每个用户只能存储一次,因为密钥是自动唯一的
  • 扩展性更好,因为您不需要查询

  • 对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表

    因此,
    onDataChange
    中的代码需要通过循环
    DataSnapshot.getChildren()
    来处理这些多个子项:

    替代数据结构

    也要考虑一下你的数据结构是否是你现在使用的最好的。你有一个列表“<代码>用户< /C>”,每个用户都有一个唯一的被标识为“代码> USERID < /代码>。而不是在推送ID下存储每个用户,我建议将每个用户存储在他们的<代码> USERID < /代码>下。 在代码中,您现在可能使用以下内容存储用户:

    DatabaseReference ref = FirebaseDatbase.getInstance().getReference("users");
    ref.push().setValue(user);
    
    要获得我推荐的结构,请将其存储为:

    ref.child(user.getUserid()).setValue(user);
    
    现在,每个用户都直接存储在其
    用户ID
    下。这意味着如果您知道
    用户ID
    ,则无需查询即可查找该用户。您的代码变成:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference()
                                   .child("users")
                                   .child(userid);
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot ds) {
            Log.e("eventvalue", "" + ds.child("events").getValue());
    
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("userserror", "" + databaseError);
        }
    });
    
    Node查询中缺少
    onDataChange
    循环,更重要的是,查询中缺少
    orderByChild().equalTo()
    。这只是一个直接查找,它:

  • 更容易编码
  • 自动意味着每个用户只能存储一次,因为密钥是自动唯一的
  • 扩展性更好,因为您不需要查询

  • 如果您需要一个列表,那么最好的方法可能是使用Firebase ui数据库。如果您需要一个列表,那么最好的方法可能是使用Firebase ui数据库。如果您需要一个列表,那么最好的方法可能是使用Firebase ui数据库。库中包括一个FirebaseRecycler,用于索引数据。对于DatabaseReference=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户ID);感谢您的DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户ID);谢谢Alex MamoThank谢谢Alex Mamo