Firebase извлечение данных из базы данных - PullRequest
0 голосов
/ 10 мая 2018

Привет! Я пытаюсь получить список из базы данных и добавить его в 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 голосов
/ 10 мая 2018

Переместите код списка и адаптера после цикла 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) {

        }
    });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...