任何人都可以帮助为每个新的经过身份验证的用户创建预定义的Firebase数据库,基本上我希望应用程序为每个新的uid创建具有预定义值的数据库。 我需要在第一次运行应用程序时才发生这种情况。
我的应用程序现在使用已经结构化的数据库运行没有问题...但在我尝试使我的应用程序创建该数据库而不是我之后我开始接收Null异常。
这是代码的一部分,我第一次运行应用程序后出现错误的部分,在Google登录消息出现或验证发生之前,应用程序开始阅读以下部分并收到NULL。
BluetoothStat.child("BluetoothStat").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
bluetoothStatus.setText(value);
if (value.equals("ON")){
bConnect.setBackgroundResource(R.drawable.bluetooth_on);
bluetoothBStatus = true;
}
else if (value.equals("OFF")){
bConnect.setBackgroundResource(R.drawable.bluetooth_off);
bluetoothBStatus = false;
}
}
这是我正在尝试预定义为我的应用程序的数据库
userUID = firebaseUser.getUid();
Engine = myRef.child("Users").child(userUID).child("Engine");
EngineStat = myRef.child("Users").child(userUID).child("EngineStat");
Bluetooth = myRef.child("Users").child(userUID).child("Bluetooth");
BluetoothStat = myRef.child("Users").child(userUID).child("BluetoothStat");
Doors = myRef.child("Users").child(userUID).child("Doors");
DoorsStat = myRef.child("Users").child(userUID).child("DoorsStat");
HeadLights = myRef.child("Users").child(userUID).child("HeadLights");
HeadLightsStat = myRef.child("Users").child(userUID).child("HeadLightsStat");
AutoLights = myRef.child("Users").child(userUID).child("AutoLights");
AutoLightsStat = myRef.child("Users").child(userUID).child("AutoLightsStat");
SystemStat = myRef.child("Users").child(userUID).child("SystemStat");
KeyLess = myRef.child("Users").child(userUID).child("KeyLess");
ApplicationStat = myRef.child("Users").child(userUID).child("ApplicationStat");
ScreenMode = myRef.child("Users").child(userUID).child("ScreenMode");
InternetStat = myRef.child("Users").child(userUID).child("InternetStat");
Application= myRef.child("Users").child(userUID).child("Application");
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ramir.carhandcontroller, PID: 14759
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ramir.carhandcontroller/com.example.ramir.carhandcontroller.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)' on a null object reference
at com.example.ramir.carhandcontroller.MainActivity.onCreate(MainActivity.java:165)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
答案 0 :(得分:0)
最后我找到了问题的答案 我的代码问题是我试图引用尚未存在的Firebase链接, 例如
Engine = myRef.child("Users").child(userUID).child("Engine");
当代码开始检查那些链接的dataChange(userUID)时,还没有创建,并且给出了NULL异常。
我通过将代码移动到另一个活动,并使主要活动仅使用google登录方法登录Firebase来解决所有提到的问题。
在身份验证期间,我将为String分配用户唯一代码,然后在登录的最后阶段,我将使用以下代码检查这是否是我的应用程序第一次运行
if (prefs.getBoolean("firstrun", true)) {
//Initiating Database values can go in here
prefs.edit().putBoolean("firstrun", false).commit();
}
在此部分之后,我使用(Intent)调用另一个活动与puExtra,我发送userUID。