gpt4 book ai didi

java - 如何从 Firebase 实时数据库中检索用户名

转载 作者:行者123 更新时间:2023-12-04 10:36:34 26 4
gpt4 key购买 nike

我有一个 Firebase 实时数据库,其中设置了一个用于评级的节点和一个用于用户的节点。
每个用户都有自己的唯一 key ,可以在其中找到他们的详细信息,包括位置、用户名等。

对于欢迎返回屏幕,我想显示用户名。用户使用他们的电子邮件和密码登录。我可以很容易地显示电子邮件,但用户名有点棘手。

我正在尝试使用事务来获取用户名的值并返回它。

package com.example.securityapp;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.MutableData;
import com.google.firebase.database.Transaction;

public class home extends AppCompatActivity {

DatabaseReference databaseUsers;
Button training, leaderboard;
Button signOut;
TextView welcome;
Button loginPage;
private FirebaseAuth mAuth;
FirebaseDatabase database = FirebaseDatabase.getInstance();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);


databaseUsers = database.getReference("Users");
leaderboard = (Button) findViewById(R.id.leaderboard);
training = (Button) findViewById(R.id.training_button);
signOut = (Button) findViewById(R.id.sign_out);
mAuth = FirebaseAuth.getInstance();
welcome = (TextView) findViewById(R.id.welcome_message);
welcome.setText("Welcome back " + mAuth.getCurrentUser().getEmail());



}
public void getUsername() {

String id = mAuth.getCurrentUser().getUid();
DatabaseReference username = databaseUsers.child(id).child("username");

username.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
String name = mutableData.getValue(String.class);
System.out.println("The username is: " + name);
return Transaction.success(mutableData);
}

@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

}

});


}

这是我的用户节点在我的数据库中的样子:

enter image description here

最佳答案

您可以使用 ListenerForSingleValueEvent像下面这样得到username

FirebaseDatabase database = FirebaseDatabase.getInstance();
databaseUsers = database.getReference("Users");
String id = mAuth.getCurrentUser().getUid();
DatabaseReference username = databaseUsers.child(id).child("username");
username.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String username = dataSnapshot.getValue().toString();
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

除此之外,您仍然可以使用 runTransaction和内部 onComplete您可以获得 username像下面这样:
username.runTransaction(new Transaction.Handler() {
@NonNull
@Override
public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
String name = mutableData.getValue(String.class);
return Transaction.success(mutableData);
}

@Override
public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
String username = dataSnapshot.getValue(String.class);
if(username != null)
welcome.setText("Welcome back " + username);
}
});

关于java - 如何从 Firebase 实时数据库中检索用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com