0

新しい認証ユーザごとに事前定義されたFirebaseデータベースを作成する方法は誰でも手伝ってください。基本的に、新しいuidごとにあらかじめ定義された値を持つデータベースを作成します。 私はアプリケーションの最初の実行で一度だけ発生する必要があります。Androidは初回起動時にfirebaseデータベースを初期化します

私のアプリケーションは現在、構造化されたデータベースを使用して問題なく実行しています...しかし、私の代わりにそのデータベースを作成しようとアプリケーションを作った後、私は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

「BluetoothStat」の価値を教えてもらえますか? MainActivity.javaの165行目には何がありますか? –

答えて

0

私は自分のアプリケーションのためのデータベースとして事前に定義しようとしているものです。最後に、私は私の質問のための答え 私はFirebaseを参照しようとしていた私のコードの問題を発見しました例えば、まだ存在していなかったリンク、

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

これらのリンクの項目DataChangeのチェックコード開始(userUID)はレコード生成されませんでしたまだ、それはNULL例外を与えていました。

コードを別のアクティビティに移動し、メインアクティビティをGoogleログインメソッドを使用してFirebaseにログインするだけで、上記の問題をすべて解決しました。私は、これは私のアプリケーションは、次のコード

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

       //Initiating Database values can go in here 

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

      } 

後を使用して実行されている最初の時間であれば、私がチェックするに記号の最後の段階では、文字列にユーザー固有のコードが割り当てられます認証中

この部分では、私はuserUIDを送信するpuExtraで(意図)を使って他のアクティビティを呼び出します。

関連する問題