2016-12-27 28 views
0

我對Java很新,所以如果這是非常直截了當的道歉。Android:如何通過Firebase Datasnapshot循環並將類存儲在類級別數組列表中?

我正試圖循環訪問我的Firebase數據庫,並將每個子項的關鍵集存儲在ArrayList中。

這裏是代碼的短版:

public class MainActivity extends AppCompatActivity { 

private DatabaseReference mRefEvents; 
private List<String> newArray; 


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

    mRefEvents = FirebaseDatabase.getInstance().getReferenceFromUrl("https:***"); 
    newArray = new ArrayList<String>(); 


    mRefEvents.addValueEventListener(new ValueEventListener() 
    { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) 
     { 
      for (DataSnapshot child : dataSnapshot.getChildren()) 
      { 
       for (DataSnapshot grandChild : child.getChildren()) 
       { 
        newArray.add(grandChild.getKey()); 
       } 
      } 
      Log.i("App info middle", newArray.toString()); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) 
     { 
     } 
    }); 

    Log.i("App info end", newArray.toString()); 
} 
} 

當我登錄addValueEventListener方法中(「應用信息中」)newArray,我得到正是我所需要的值。但是,底部的第二個日誌(「App info end」)給了我一個空數組,並且不會將密鑰存儲到ArrayList newArray中。

我敢肯定我錯過了一些簡單的東西,但任何建議將不勝感激。謝謝!

回答

0

這看起來像你正在運行一切。由於偵聽器是異步運行的,因此我想在敲擊「應用程序信息中間」偵聽器之前,您正在敲擊「App Info End」底部的日誌。嘗試使用其他方法運行「應用信息結束」,或點擊按鈕後,您應該看到陣列已填充。說完這一切後,你可以將你的輸出發佈到控制檯,這樣我們可以確認應用程序信息結束在應用程序信息Middle之前被擊中了嗎?

+1

你是絕對正確的亞歷山大。這裏是控制檯輸出 –

+1

12-26 20:02:13.175 8247-8247/com.example.kaznaur.simafirebasetrial I /應用信息結束:[] 12-26 20:02:14.259 8247-8247/com.example。 kaznaur.simafirebasetrial我/應用信息中間:[辯論,演講,學士,家庭主婦,語音,足球] 12-26 20:02:20.760 8247-8247/com.example.kaznaur.simafirebasetrial我/應用信息buttonClick:[辯論,演講,學士,家庭主婦,聲音,足球] 12-26 20:02:30.311 8247-8247/com.example.kaznaur.simafirebasetrial我/應用程序信息buttonClick:[辯論,演講,學士,家庭主婦,聲音,足球] –

+0

在使用Firebase時,最初使我絆倒。很高興能爲你滾動。 –

相關問題