gpt4 book ai didi

java - 当我第一次启动应用程序时,用户名是空的

转载 作者:行者123 更新时间:2023-11-29 18:42:44 26 4
gpt4 key购买 nike

public class SplashActivity extends AppCompatActivity {

private final int SPLASH_DISPLAY_LENGTH = 1000;
private FirebaseAuth mAuth;
private FirebaseFirestore db;
private static String userName;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
generateUserName();

try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}

mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();

if(user!=null){
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
Toast.makeText(this, userName, Toast.LENGTH_SHORT).show();
intent.putExtra("name", userName);
startActivity(intent);
finish();
}else{
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
}, SPLASH_DISPLAY_LENGTH);
}
}

private void generateUserName(){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
db = FirebaseFirestore.getInstance();
db.collection("users").document(user.getEmail())
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
userName = task.getResult().get("name").toString();
}
});
}

}

此 Activity 是 SplashActivity。因此,当用户已经登录时,应用程序将跳过此 Activity 。但是这段代码中发生了奇怪的事情。变量 userName 获取 FireStore 中用户的名称数据。但是当我第一次启动应用程序时,它是空的。但是在我的手机上按下后退按钮后,应用程序显示 MainActivity 并且名称不为空。这很奇怪。我不明白为什么会这样。

我不知道如何解决这个问题。

最佳答案

当您重新阅读您的代码时,它不会变得任何奇怪,但这是意料之中的。在您的 generateUserName 完成执行以下代码之前,您不会获得 userName:

private void generateUserName(){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
db = FirebaseFirestore.getInstance();
db.collection("users").document(user.getEmail())
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
userName = task.getResult().get("name").toString();
}
});
}

您可以看到您正在 OnCompleteListener 中等待用户名,它正在异步运行。

因此,您需要在获得 userName 值后执行其他代码。像这样:

private void generateUserName(){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
db = FirebaseFirestore.getInstance();
db.collection("users").document(user.getEmail())
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
userName = task.getResult().get("name").toString();
doSomethingAfterFoundUserName(userName);
}
});
}

private void doSomethingAfterFoundUserName(String userName) {
// Get current user
// check for current user
// etc..
}

关于java - 当我第一次启动应用程序时,用户名是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52689902/

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