我有这种方式的数据库结构
-... location
-... messages
-... id1_id2
-... id3_id4
-... id5_id6
.
.
.
如何在消息中访问对象,我知道id1
是关键。
TIA。
答案 0 :(得分:3)
将您的数据库更改为:
Messages
userid1
userid2
message: hello
然后检索message
,执行以下操作:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Messages").child(userid1);
ref.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String messages=ds.child("message").getValue().toString();
}
}
});
答案 1 :(得分:1)
假设您的结构是这样的:
你可以做这样的事情,这将从开始获取消息的所有节点 id1 :
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.projectreactor</groupId>
<artifactId>reactor-spring</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>io.projectreactor.addons</groupId>
<artifactId>reactor-test</artifactId>
<version>3.0.7.RELEASE</version>
</dependency>
我从javascript implementation中获取了这个想法,但它也适用于Android,我在我的设备/数据库上运行测试。请注意,此方法可用于获取具有给定ID的启动的数据。
修改强>
这个官方post讨论了查询包含某个字符串的firebase数据的想法。此外,这也是question。最重要的是api不支持这些类型的查询,我上面提到的方法是你能够实现最接近&#34; SQL LIKE&#34;在火基地。目前,没有办法搜索END与另一个字符串的字符串。 endAt并不意味着字符串以id1结尾,而是我想要检索的值的范围在(id1 +&#34; \ uf8ff&#34;)结束,这意味着任何以id1开头的字符串。 您可以选择更改架构或抓取所有消息并在本地搜索(其他两个答案的建议)。
答案 2 :(得分:0)
试试这个
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("location/messages");
ref.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if(ds.getKey().contains("bob")){
//Do something with the date
break;
}
}
}
});