2017-11-30 14 views
1

目標:私は(Androidの中で。)Firebaseからデータを取得し、ネストされたノードから文字列に値を挿入しようとしていますFirebase - (複数の子ノードを持つDataSnapshot) - NullPointerExceptionが

:それは最初の変数/キーと値のペア(MNUM)用FINEが、他


研究ためにNullPointerを取得します。このSPEについてFirebaseドキュメント、YouTubeの、stackoverflowの含むcific質問:トラブルDBは、複数のネスト


エラーある場合Firebaseデータベース情報の取得についての情報を見つける:

java.lang.NullPointerException: println needs a message 
                       at android.util.Log.println_native(Native Method) 
                       at android.util.Log.i(Log.java:211) 
                       at com.netgalaxystudios.timeclock.RegisterSubscriptionActivity$1.onDataChange(RegisterSubscriptionActivity.java:80) 

エラー箇所に、これは他の人に適用される方法How to get child of child value from firebase in android?

この行:Log.i( "マイクロ名"、マイクロ)。


データベース:RegisterSubscriptionActivity.java enter image description here


を使用しているFirebase DBの 画像:

public class RegisterSubscriptionActivity extends Activity { 

    private DatabaseReference mDatabase; 
    private DatabaseReference mDatabaseMicro; 

    ArrayList subscriptionInfo; 

    //Subscription (String) values 
    String micro, small, medium, large, enterprise; 
    String mNum, sNum, medNum, lNum, eNum; 
    String mPrice, sPrice, medPrice, lPrice, ePrice; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register_subscription); 

     subscriptionInfo = new ArrayList<>(); 


     //GET INSTANCE OF FIREBASE DB & GRAB SUBSCRIPTION DATA 
     mDatabase = FirebaseDatabase.getInstance().getReference("Subscription"); 
     mDatabaseMicro = mDatabase.child("Micro"); 
     mDatabaseMicro.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { //literally a "snapshot" of the data 
       //dataSnapshot. 

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

        if (subscriptionDataSnapshot.getKey().equals("mNum")) { 
         mNum= subscriptionDataSnapshot.getValue().toString(); 
        } 
        if(subscriptionDataSnapshot.getKey().equals("mPrice")) { 
         mPrice = subscriptionDataSnapshot.getValue().toString(); 
        } 
        if(subscriptionDataSnapshot.getKey().equals("micro")) { 
         micro = subscriptionDataSnapshot.getValue().toString(); 
        } 

        Log.i("micro number", mNum); 
        //Log.i("micro price", mPrice); 
        Log.i("micro name", micro); 

        String subscriptions = subscriptionDataSnapshot.getValue(String.class); //Each time it gets the key/value pair per node 
        subscriptionInfo.add(subscriptions); 


       } 

答えて

0

あなたがそれらのログステートメントを置くことを意味しましたfの外側またはループ?最初のループでは "mNum"に一致しますが、microはまだnullになります。 Microノードの下にデータを取得するために

0

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

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference microRef = rootRef.child("Subscription").child("Micro"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String mNum = ds.child("mNum").getValue(String.class); 
      String mPrice = ds.child("mPrice").getValue(String.class); 
      String micro = ds.child("micro").getValue(String.class); 
      Log.d("TAG", mNum + "/" + mPrice + "/" + micro); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
microRef.addListenerForSingleValueEvent(eventListener); 

あなたoutoutは次のようになります。

10 Employees/25/Micro 
関連する問題