【问题标题】:Android Studio how to get the name's user logged from the Firebase database?Android Studio 如何从 Firebase 数据库中获取用户名?
【发布时间】:2018-01-31 00:35:05
【问题描述】:

我有这个代码,我怎样才能只获取记录的名称值?我只需要记录名称的用户,谢谢!

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usuariosRef = rootRef.child("Usuarios");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            Log.d("TAG", name);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usuariosRef.addListenerForSingleValueEvent(eventListener);

这会获取所有名称,我只想记录该名称的用户。

【问题讨论】:

  • 你能贴一张你的数据库截图吗?
  • 当然,完成了

标签: java android firebase android-fragments firebase-realtime-database


【解决方案1】:

它正在检索所有名称,因为您正在遍历所有用户。要获取当前用户的名称,只需使用用户的 uid。要获取当前用户的 uid,请执行以下操作:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

那么你就可以用这个uid来只获取当前用户了。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usuariosRef = rootRef.child("Usuarios");
DatabaseReference current_userRef = usuariosRef.child(uid);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
public void onDataChange(DataSnapshot dataSnapshot) {

        String name = datasnapshot.child("name").getValue(String.class);
        Log.d("TAG", name);

}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
current_UserRef.addListenerForSingleValueEvent(eventListener);

希望这会有所帮助!

【讨论】:

  • 在您的代码“String name = datasnapshot.child("name")....”中是 dataSnapshot 不是 datasnapshot 吗?它还给了我 name = null。
【解决方案2】:

要显示数据库中的所有用户,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usuariosRef = rootRef.child("Usuarios");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            Log.d("TAG", name);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usuariosRef.addListenerForSingleValueEvent(eventListener);

输出将是您登录用户的所有名称:

Eric
Julian Ramos
//and so on

要获取单个用户的详细信息,请使用以下代码:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Usuarios").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String name = dataSnapshotds.child("name").getValue(String.class);
        Log.d("TAG", name);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(eventListener);

因此,您现在可以显示数据库中的所有用户,或仅显示登录用户。

【讨论】:

  • 我有这个但是在运行中出现 name = null;
  • 查看我的更新答案。我已删除 .child(uid)。我被错误地添加了。现在可以用了吗?
  • 是的,这会打印 FirebaseDatabase 中的所有名称,但我只希望用户登录,例如我使用 eric 登录,所以我只会得到名称“Eric”
猜你喜欢
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多