Firebase从数据库中恢复数据

时间:2018-05-10 18:00:48

标签: android firebase firebase-realtime-database

您好我试图从数据库中检索列表并将其添加到ListView,我的问题是仅在onResume()之后触发事件,因此onCreate()函数中的数组为空。我想在onCreate()函数上检索数据并在这里创建我的ListView代码。

公共类MainActivity扩展了AppCompatActivity {

private DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("projetos");
private DatabaseReference mProjetoReference;
private ChildEventListener mProjetoListener;

private List<Projeto> projetos;
ListView listaProjetos;
ProjetoDAO projetoDAO;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    projetos = new ArrayList<Projeto>();
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Projeto projeto = new Projeto();
            for(DataSnapshot postSnapShot : dataSnapshot.getChildren()){
                projeto = postSnapShot.getValue(Projeto.class);
                projetos.add(projeto);
            }
            //Log.i("TESTEList", "projetos tamanho = " + projetos.size());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    listaProjetos = findViewById(R.id.lista);
    ArrayAdapter<Projeto> adapter = new ArrayAdapter<Projeto>(this, android.R.layout.simple_list_item_1, projetos);
    listaProjetos.setAdapter(adapter);
}

@Override
protected void onStart() {
    super.onStart();

}

我不知道我的问题是否清楚,英语不是我的第一语言。

1 个答案:

答案 0 :(得分:1)

当您拥有要创建适配器的数据时,在for循环后移动列表和适配器的代码

// for future , accessible in other methods
ArrayAdapter<Projeto> adapter 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    projetos = new ArrayList<Projeto>();
    // for efficiency, time consuming so do it early
    listaProjetos = findViewById(R.id.lista);
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Projeto projeto = new Projeto();
            for(DataSnapshot postSnapShot : dataSnapshot.getChildren()){
                projeto = postSnapShot.getValue(Projeto.class);
                projetos.add(projeto);
            }
           adapter = new ArrayAdapter<Projeto>(MainActivity.this, android.R.layout.simple_list_item_1, projetos);
          //  Note : inside anonymous classes use
          // ActivityName.this for context
           listaProjetos.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}