странная ошибка с firebase java admin цикл sdk datasnapshot не запускается при вызове метода из другого класса - PullRequest
0 голосов
/ 30 августа 2018

У меня есть класс DataBase с методом «query», который в основном помещает весь дочерний элемент узла «riferimento» в массив

public ArrayList<ContenutoDAO> query(String riferimento)
{
    ArrayList<ContenutoDAO> res=new ArrayList<>();

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference(riferimento);


    ref.addListenerForSingleValueEvent(new ValueEventListener()
    {
        private ContenutoDAO temp=null;

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for(DataSnapshot ds:dataSnapshot.getChildren())
            {
                temp=new ContenutoDAO();
                temp.setTipo(ds.child("tipo").getValue(String.class));
                temp.setTitolo(ds.child("titolo").getValue(String.class));
                temp.setValore(ds.child("valore").getValue(String.class));
                res.add(temp);

                System.out.println("prova-prova"); 
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    return res;
}

Когда слушатель подключен, цикл for вообще не выполняется, пока я не вызову temp.setTipo (...), temp.setTitolo (...) и temp.setValore (...). не позволяйте циклу for выполняться. Если я удаляю эти методы, цикл for работает это класс ContenutoDAO:

public class ContenutoDAO {

private SimpleStringProperty tipo;
private SimpleStringProperty titolo;
private SimpleStringProperty valore;


public void setTipo(String tipo) {
    this.tipo.set(tipo);
}

public void setTitolo(String titolo) {
    this.titolo.set(titolo);
}

public void setValore(String valore) {
    this.valore.set(valore);
}

public String getTipo() {
    return tipo.get();
}

public String getTitolo() {
    return titolo.get();
}

public String getValore() {
    return valore.get();
}

public StringProperty tipoProperty() {
    return tipo;
}

public StringProperty titoloProperty() {
    return titolo;
}

public StringProperty valoreProperty() {
    return valore;
}}

Я пробовал много решений, таких как:

1.использование строки вместо свойства simplestring в классе ContenutiDAO

  1. заполняет массив списков данных и преобразует его в массив списков ContenutoDAO другим методом

    3.введите код метода запроса в конструктор базы данных классов (конструктор initialize firebaseapp)

    4.создание 3 списка строк (по одному на каждого потомка узла: типо, титоло и значение), затем заполнение его значениями и последующее заполнение массива ContenutiDAO, используя эти данные

это структура базы данных

-root
--- музей музыки
----- Чак Берри
------- contenuto0
------------ valore: значение
------------ Типо: значение
------------ titolo: значение
------- contenuto1
------------ valore: значение
------------ Типо: значение
------------ titolo: значение

Мне нужно вернуть всех детей из музыкального музея / Чака Берри.
Извините, мой плохой английский, я знаю, что это странная ошибка, спасибо за внимание.

...