【问题标题】:Android initialize firebase databse at very first runAndroid 在第一次运行时初始化 firebase 数据库
【发布时间】:2017-06-21 23:13:29
【问题描述】:

任何人都可以帮助为每个新的经过身份验证的用户创建预定义的 Firebase 数据库,基本上我希望应用程序为每个新的 uid 创建具有预定义值的数据库。 我只需要在应用程序的第一次运行时发生一次。

我的应用程序现在正在使用我已经结构化的数据库运行而没有问题...但是在我尝试让我的应用程序而不是我创建该数据库之后,我开始收到 Null 异常。

这是代码的一部分,在我第一次运行应用程序之后以及在谷歌登录消息出现或发生身份验证之前,我得到错误的部分,应用程序开始阅读以下部分并接收 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) 

【问题讨论】:

  • 你能告诉我BluetoothStat的值吗?你在 MainActivity.java 的第 165 行有什么?

标签: android database firebase firebase-realtime-database firebase-authentication


【解决方案1】:

我终于找到了我的问题的答案 我试图引用尚不存在的 Firebase 链接的代码问题, 例如

Engine = myRef.child("Users").child(userUID).child("Engine");

当代码开始检查这些链接(userUID)的 dataChange 时尚未创建,这会给出 NULL 异常。

我解决了所有提到的问题,方法是将我的代码移动到另一个活动,并使主活动仅使用谷歌登录方法登录到 Firebase。

在身份验证期间,我会将用户唯一代码分配给一个字符串,然后在登录的最后阶段,我将检查这是否是我的应用程序第一次使用以下代码运行

if (prefs.getBoolean("firstrun", true)) {

                //Initiating Database values can go in here

                prefs.edit().putBoolean("firstrun", false).commit();

            }

在这部分之后,我使用带有 puExtra 的 (Intent) 调用另一个活动,并在其中发送 userUID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2020-11-20
    • 2014-11-14
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多