我有一个问题困扰了几天的应用程序。包含一个登录名,然后将您发送到主要活动,其中有一个按钮为您提供奖励(硬币)。此按钮将所有数据(用户ID,电子邮件和硬币数量)保存在firebaseDB上。如果我离开应用程序并在几秒钟后返回到该应用程序,则该应用程序将崩溃,因为它无法访问用户ID和电子邮件。崩溃的代码是这个
public void addCoins(View view) {
mCoins += 5;
user newUser = new user(mAuth.getCurrentUser().getUid(), mAuth.getCurrentUser().getEmail(), mCoins); //---> Here
mRootRef.child("UserList").child(newUser.getUid()).setValue(newUser);
}
我相信我可以将uid和电子邮件存储在文件中,但这就是我不想做的。我想我也可以保存实例,但是我不确定该怎么做。如果有人可以帮助我,我将不胜感激。
谢谢
编辑:
FirebaseAuth初始化:
private FirebaseAuth.AuthStateListener authListener;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAuth = FirebaseAuth.getInstance();
final FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
/*Rest of the code ....*/
}
和日志跟踪
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.capie.clashgems.MainActivity.addCoins(MainActivity.java:244)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
尝试在空引用上调用虚拟方法。我相信是由于我之前提到的原因,该变量在离开应用程序几秒钟后变为空。