2016-12-27 26 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时,最初使我绊倒。很高兴能为你滚动。 –

相关问题