Согласно 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:
Правила базы данных:
{
"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
), оно снова не сработало ...