2017-11-25 123 views
0

私はAndroidベースのアプリケーションにFirebaseを使用しています。以下のコード、Android Studio Firebase「No such instanceフィールド」エラー

DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference(); 
matchReference = rootReference.child("tournaments"); 
userReference = rootReference.child("Users").child(deviceID); 

    userReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for(DataSnapshot snapshot : dataSnapshot.getChildren()) { 

       if(snapshot.child(matchList.get(position).getId()).exists()) { 

        //If the user has Starred this game 

        isStarred = true; 

       } else { isStarred = false; } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

で私はuserReferenceフィールドに"No Such instance field"エラーが発生します。私はそれをデバッグするとき、それは私に正しいデータベースパスを与えますが、それはaddValueEventListener関数を入力しません。

私のデータベースは

enter image description here

のように見え、 "starredGames" と呼ばれる別の子は私のコードに追加されます。

なぜ私にエラーが表示されますか?

+0

あなた 'userReference'はあなた' matchReference'ではなく、 'rootReference'の子することになっていますか? Firebaseの構造をより詳細に表示できますか? – timothyclifford

答えて

0

あなたdeviceIDの値を得るための正しい方法は次のとおりです。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference deviceIDRef = rootRef.child("Users").child("6610609cfc2c7945"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String deviceID = dataSnapshot.child("deviceID").getValue(String.class); 
     Log.d("TAG", deviceID); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
deviceIDRef.addListenerForSingleValueEvent(eventListener); 
関連する問題