2017-05-12 10 views
0

私はアンドロイドとfirebaseにはかなり新しいです。私はBluetoothを介してデバイスに接続し、ペアリング後にデバイスを共有できるアプリを作っています。 Firebaseからデータを取得しようとするまで、今はすべてうまくいきます。 私のデータベース構造は次のとおりです。 Database Structurefirebaseにアクセスする方法値なしのキー

共有デバイスは、ユーザーが他のユーザーと共有できるものです。ユーザデバイスは、ユーザが保存するデバイスです。 「meh」はデバイスの名前です。ここで は、私がデータにアクセスしようとしている方法です:

public class RecievedKeys extends AppCompatActivity { 
    String key; 
    TextView mName; 
    TextView mDevice; 
    String name; 
    String MAC; 
    User user = new User(); 
    DatabaseReference mDatabaseRef; 
    String decPass; 
    String password; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_recieved_keys); 
     mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Shared_With").child(User.getUid()); 
     mName = (TextView)findViewById(R.id.name); 
     mDevice = (TextView)findViewById(R.id.MAC); 
     mDatabaseRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       name = dataSnapshot.child("Name").getValue().toString(); 
       MAC = dataSnapshot.child("MAC").getValue().toString(); 
       password = dataSnapshot.child("password").getValue().toString(); 
       System.out.println(name); 
       mName.setText(name); 
       mDevice.setText(MAC); 
       decPassword(password); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 

私は何かを得ることができません、その代わり、私がスローされた例外を取得します。どんな指導も高く評価されます。ここで

がスローされる例外で、発生する、NullPointer:

05-12 06:10:25.608 5268-5268/habibqureshi.simplegui.simplegui E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
                         at habibqureshi.simplegui.SmartLock.RecievedKeys$1.onDataChange(RecievedKeys.java:38) 
                         at com.google.android.gms.internal.zzbmz.zza(Unknown Source) 
                         at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source) 
                         at com.google.android.gms.internal.zzboc$1.run(Unknown Source) 
                         at android.os.Handler.handleCallback(Handler.java:739) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:135) 
                         at android.app.ActivityThread.main(ActivityThread.java:5910) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:372) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
05-12 06:10:25.608 5268-5426/habibqureshi.simplegui.simplegui D/FA: Logging event (FE): _ae, Bundle[{_o=crash, _sc=RecievedKeys, _si=4592305897079779979, timestamp=1494551425619, fatal=1}] 
05-12 06:10:25.939 5268-5268/habibqureshi.simplegui.simplegui E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: habibqureshi.simplegui.simplegui, PID: 5268 
                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
                        at habibqureshi.simplegui.SmartLock.RecievedKeys$1.onDataChange(RecievedKeys.java:38) 
                        at com.google.android.gms.internal.zzbmz.zza(Unknown Source) 
                        at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source) 
                        at com.google.android.gms.internal.zzboc$1.run(Unknown Source) 
                        at android.os.Handler.handleCallback(Handler.java:739) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5910) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

私が行うために必要なものはShared_With-> UID->メール:>名 - >子供の値にアクセスします。

+0

例外がスローされている場所を示すlogcatをアップロードする - これは、ここにいる人々が何が間違っているのかを識別するのに役立ちます。 – scb998

+0

logcatをAddesします。 –

答えて

0

データを別の方法で構造化する必要があるかもしれません。 あなたはこのような何か行うことができます。問題は、あなたのreferenceにいくつかのチャイルズを欠落していたということでした

mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Shared_With").child(User.getUid()).child(User.getEmail()).child("meh"); 
    mName = (TextView)findViewById(R.id.name); 
    mDevice = (TextView)findViewById(R.id.MAC); 
    mDatabaseRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      name = (String) dataSnapshot.getKey(); 
      MAC = (String) dataSnapshot.child("MAC").getValue(); 
      password = (String) dataSnapshot.child("password").getValue(); 
      System.out.println(name); 
      mName.setText(name); 
      mDevice.setText(MAC); 
      decPassword(password); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

:これを達成するために

{ 
    shared { 
     receiver_id { 
      user_id: true, 
      user_id: true, 
      user_id: true 
     } 
    } 

    devices { 
     user_id { 

      meh: { 
       attribute: 'lorem ipsum' 
      } 
     } 
    } 
} 
+0

それは私が混乱しているところです。電子メール、meh、彼らはユーザーを生成しました。どうすればそれらにアクセスできますか? uidを使っても簡単にアクセスできます。しかし、私はどのようにユーザー生成のものを得るために管理できますか? –

+0

そうすることはお勧めしません。あなたはそれをしてはいけませんが、あなたのために働くかどうかを試すことができます。しかし、あなたがするべきことは、あなたのjsonをfirebaseにマップするクラスを作成することです。そして、firebase sdkはクラスオブジェクト内のそのjsonを簡単に変換できます。https://firebase.google.com/docs/databaseここで完全な例を見ることができます。/android/read-and-write –

+0

すでに他のクラスでそれを行っています。ここでの問題は、shared_withデータが送信者のUIDと同様に生成されることです。電子メールは受信者のものです。受信側では、どのようにしてユーザーにデータベースからの価値を知ったり得ることができますか?それが問題です。 –

0

を、次のコードを使用してください。

希望します。

関連する問題