gpt4 book ai didi

android - Firebase 中的 ExceptionInInitializerError

转载 作者:行者123 更新时间:2023-11-30 00:05:57 27 4
gpt4 key购买 nike

由于在整个项目中使用相同的实例,我决定将它们放在单独的类中并使用静态方法调用它们。问题是它们中的一些效果很好,有些效果不好。不明白这是什么逻辑。

我有一个实例类(我知道 dagger2 不用担心)

public class FirebaseReferences {

public static FirebaseUser currentUserInstance = FirebaseAuth.getInstance().getCurrentUser();
public static String currentUserUid = currentUserInstance.getUid();

public static FirebaseUser getCurrentUserInstance(){
return FirebaseAuth.getInstance().getCurrentUser();
}

public static DatabaseReference getCurrentUserUidReference(){
return FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserUid);
}

static String getCurrentUserUidString(String uid){
String currentUid = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserUid).toString();
return currentUid;
}

public String getUserToken(){
return FirebaseInstanceId.getInstance().getToken();
}

}

那是我尝试调用 getCurrentUserInstance 的类,但出现热错误

firebaseAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
Log.v("RW", "onAuthStateChanged" );
if (FirebaseReferences.getCurrentUserInstance() != null) {
Log.v("RW", "user is not null");
//Create new user
final String userName = FirebaseReferences.getCurrentUserInstance().getDisplayName();
FirebaseReferences.getCurrentUserUidReference().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

//the image is still the default one
HashMap<String, String> userMap = new HashMap<>();
userMap.put("name", userName);
userMap.put("image", "default");
userMap.put("thumb_image", "default");
userMap.put("status", "Your status is here...");
FirebaseReferences.getCurrentUserUidReference().setValue(userMap);


}

错误代码

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.borisruzanov.russianwives, PID: 19900
java.lang.ExceptionInInitializerError
at com.borisruzanov.russianwives.utils.FirebaseReferences.getCurrentUserInstance(FirebaseReferences.java:14)
at com.borisruzanov.russianwives.utils.AuthStateListenerUtil$1.onAuthStateChanged(AuthStateListenerUtil.java:34)
at com.google.firebase.auth.zzi.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
at com.borisruzanov.russianwives.utils.FirebaseReferences.<clinit>(FirebaseReferences.java:11)

我不确定,但也许我犯了一个错误,我试图将这些事件保存在单独的类中?或者也许有更好的做法我该怎么做?但无论如何我不想复制粘贴所有类中相似的所有实例

附言。我尝试编辑代码,现在可以使用了。但奇怪的是,这里 FirebaseUser user = firebaseAuth.getCurrentUser();我在没有调用静态方法的情况下将 FirebaseUser 与变量一起使用,当我使用 static 时它起作用但不起作用。但同时在 FirebaseReferences.getCurrentUserUidReference(). 行中它与静态一起工作

     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
Log.v("RW", "onAuthStateChanged" );
if (user != null) {
Log.v("RW", "user is not null");
//Create new user
String uid = user.getUid();
final String userName = FirebaseReferences.getCurrentUserInstance().getDisplayName();

FirebaseReferences.getCurrentUserUidReference().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

最佳答案

没有有效的 Firebase 用户通过他们的身份验证触发器登录。如果 session 已过期、用户不再有效或已禁用,则可能会发生这种情况。

在使用任何与用户相关的数据之前总是进行空检查

if(Firebase.getInstance().getCurrentUser()!=null){
//Do your thing
}

基本上,您的静态方法 getCurrentUserInstance() 将返回一个空用户,而您正在对这个空引用调用 getUserId()。对结果进行空检查

关于android - Firebase 中的 ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012585/

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