Не могу прочитать данные из базы данных Firebase в реальном времени.Метод OnDataChange никогда не запускается - PullRequest
0 голосов
/ 20 мая 2019

Согласно google doc метод onDataChange будет вызываться со снимком данных в этом месте. Он также будет вызываться при каждом изменении данных. Но в моем случае он никогда не вызывается. Я прочитал документацию о базе данных Firebase Realtime и даже смотрел видео как , что . Ни один фрагмент кода не сработал.

Мой текущий код состояния:

public void init() {
    showLoading();
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("sales");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            doStuff(dataSnapshot);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            showError(databaseError);
        }
    });
}

У меня есть точки останова на doStuff() и showError().

Узлы базы данных Firebase: enter image description here

Правила базы данных:

 {
   "rules": {
   ".read": true,
   ".write": false
   }
 }

Я потратил два дня на исследования и до сих пор не нашел ничего, что сработало или имело объяснение моей проблемы.

EDIT: Код моего Fragment:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_sales, container, false);
    ButterKnife.bind(this, view);

    init();

    return view;
}

public void init() {
    showLoading();
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("sales");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            doStuff(dataSnapshot);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            showError(databaseError);
        }
    });
}    

private void showLoading() {
    progressBar.setVisibility(View.VISIBLE);
}

public void hideLoading() {
    progressBar.setVisibility(View.GONE);
}


@Override
public void onDestroy() {
    super.onDestroy();
    hideLoading();
}

Я пробовал оба addListenerForSingleValueEvent и addValueEventListener и получил тот же результат.

Также я пробовал разные комбинации для базы данных Rules (true, false, "auth == null", "auth! = Null").

РЕДАКТИРОВАТЬ 2: Я просто попробовал еще раз, и это сработало! onDataChange() срабатывает один раз. Но когда я перезапустил приложение с абсолютно тем же кодом (просто снова нажал кнопку debug), оно снова не сработало ...

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