2016-11-12 97 views
0

我正在開發一個使用Firebase的Android應用程序。我需要將下面樹中的所有值寫入ArrayList。但我得到NullPointerException。我已經在下面顯示了我的數據庫和代碼。請幫助我。 它不同於How to Retrieve a List object from the firebase in android 中的問題我試圖retreive3一個字符串列表,而不是對象。我找不到任何這方面的例子。如何檢索Firebase中所有值的列表?

Here's my firebase database

下面的代碼:

brandRef=FirebaseDatabase.getInstance().getReferenceFromUrl("https://stockmanager-142503.firebaseio.com/Brands "); 
brandRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds: dataSnapshot.getChildren()) 
      allBrands.add(ds.getValue(String.class)); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

的分貝參考工作正常。我可以毫不費力地添加值。

這裏是我得到的錯誤:

FATAL EXCEPTION: main java.lang.NullPointerException at com.strokx.user.stockmanager.AddItemFragment$2.onDataChange(AddItemFragment.java:93) 
                       at com.google.android.gms.internal.zzakg.zza(Unknown Source) 
                       at com.google.android.gms.internal.zzalg.zzcxk(Unknown Source) 
                       at com.google.android.gms.internal.zzalj$1.run(Unknown Source) 
                       at android.os.Handler.handleCallback(Handler.java:605) 
                       at android.os.Handler.dispatchMessage(Handler.java:92) 
                       at android.os.Looper.loop(Looper.java:137) 
                       at android.app.ActivityThread.main(ActivityThread.java:4517) 
                       at java.lang.reflect.Method.invokeNative(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:511) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
                       at dalvik.system.NativeStart.main(Native Method) 

回答

2

在你的回調(假設你想那麼person屬性):

brandRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds: dataSnapshot.getChildren()) { 

      MeetingUser person = ds.getValue(Person.class); 

      String id = person.getId(); 
      String name= person.getName(); 

      // Then add the value you require to add in your ArrayList 
      allBrands.add(name); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
1

getKey()功能適用於本案。

brandRef=FirebaseDatabase.getInstance().getReferenceFromUrl("https://stockmanager-142503.firebaseio.com/Brands "); 
brandRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds: dataSnapshot.getChildren()) 
      allBrands.add(ds.getKey()); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
相關問題