java - 使用 Java 加入 Firebase 实时数据库?
问题描述
我正在尝试在 java 中使用 firebase 连接两个节点,但我无法关联所有数据并将其正确显示在视图中。有什么解决办法吗?
这是firebase中的数据:
- 人
- 66db3d6a-c6cf-4577-a857-eca22cd55403
- 名称:“aaa”
- 姓氏:“bb”
- 邮件:“john@hotmail.com”
- 编号:“66db3d6a-c6cf-4577-a857-eca22cd55403”
- 66db3d6a-c6cf-4577-a857-eca22cd55403
- 用户
- 4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c
- 名称用户:“john123”
- 密码:”******”
- idPerson:“66db3d6a-c6cf-4577-a857-eca22cd55403”
- idUser:“4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c”
- 4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c
这是我的代码:
private void listAll(){
Map<String, String> valuesMapJoin = new HashMap<>();
databaseReference.child("Person").orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
Map<String, String> valuesMapPerson =
(HashMap<String,String>)dataSnapshot1.getValue();
String idPerson = valuesMapPerson.get("id");
String name = valuesMapPersona.get("name");
String surname = valuesMapPersona.get("surname");
String surname = valuesMapPersona.get("mail");
databaseReference.child("User").orderByKey().equalTo(idPerson).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
Map<String, String> valuesMapUser = (HashMap<String,
String>)dataSnapshot1.getValue();
String nameUser = valuesMapUsuario.get("nameUser");
String password = valuesMapUsuario.get("password");
listDataJoin.add(name + "-" + sourname + "-" + mail + "-" + nameUser + "-
" + password);
arrayAdapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, listDatosJoin);
listJoin.setAdapter(arrayAdapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
解决方案
private void listAll(){
Map<String, String> valuesMapJoin = new HashMap<>();
databaseReference.child("Person").orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
Map<String, String> valuesMapPerson =
(HashMap<String,String>)dataSnapshot1.getValue();
String idPerson = valuesMapPerson.get("id");
String name = valuesMapPersona.get("name");
String surname = valuesMapPersona.get("surname");
String surname = valuesMapPersona.get("mail");
databaseReference.child("User").orderByKey().equalTo(idPerson).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
Map<String, String> valuesMapUser = (HashMap<String,
String>)dataSnapshot1.getValue();
String nameUser = valuesMapUsuario.get("nameUser");
String password = valuesMapUsuario.get("password");
listDataJoin.add(name + "-" + sourname + "-" + mail + "-" + nameUser + "-
" + password);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
arrayAdapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, listDatosJoin);
listJoin.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
使用上面的代码片段主要问题是您在 for 循环中设置了适配器,因此您的代码无法正常工作
推荐阅读
- docker - 无法从终端登录到 docker hub
- r - 模式排序及其用 R 表示
- angularjs - Angular 6 - 尝试读取八位字节流内容时的 HttpClient.get 401 错误响应
- realm - 在 Realm Studio 中执行查询计数
- firebase-storage - Firebase Storage 添加 firebase-storage@system.gserviceaccount.com 问题
- javascript - 操作方法 - 阅读更多阅读/减少 Angular 5 按钮
- javascript - 如何在标记上添加不对称的脉冲动画
- git - 使用 GIT-TFS 工具将所有历史记录从 Azure DevOps TFVC 集合克隆到 Git 时出现 TF31002 错误
- java - 如何在 Spring Boot 应用程序中为 Azure 监控设置变量 instrumentationKey
- javascript - AngularJS + webpack 热模块替换忽略 app.controllers 中的变化