Intereting Posts
Ошибка: выполнение выполнено для задачи ': lib: compileReleaseAidl'. > Executor Singleton не запущен Является ли отказ от приложения неодобрительным? Scala-android plugin Наследование AppCompat 22.1.1 Диалог colorAccent от темы приложения не работает Редактор макета студии Android показывает пользовательские свойства вида? Скопировать тему из другого приложения Насколько безопасно это иметь потребительский ключ Twitter и секретный жесткий код в приложении для Android? Как включить перенос приложения на SD-карту (и поддержка андроида еще <2.2)? Android studio, где находится файл сопоставления proguard Импорт com.google.api.client не может быть разрешен в Eclipse EditText с переносом слов, без разрывов строк и с действием клавиатуры, установленным на «next», Charles SSL Proxy работает для Chrome, но не для приложений BluetoothAdapter.ACTION_REQUEST_ENABLE вызывает onActivityResult немедленно Активность начата без EXTRA_ACCOUNT при использовании совместного использования в GooglePlus SDK Ссылаемый SMS-наблюдатель выполняет 3 раза

Зная, когда Firebase завершил вызов API?

У меня возникли проблемы с пониманием того, когда мой API-интерфейс Firebase завершен. После прочтения Firebase documentation я нашел следующее:

События Value всегда запускаются последними и гарантированно содержат обновления от любых других событий, которые произошли до того, как был сделан снимок.

Я понимаю, это означает, что только после onChildAdded вызова onChildAdded вызывается ValueEventListener . В результате я подумал, что я могу заполнить свой RecyclerView в функции onChildAdded а затем вызов onSingleValueListener , я могу просто закончить анимацию моего экрана загрузки (который начал анимацию перед этим вызовом функции) и продолжить. Тем не менее, я столкнулся с проблемой, когда я поставил некоторые осторожные инструкции System.out.println и обнаружил, что в моем случае Test 1 вызывается до Test 2 . Это вызывает проблемы, потому что на самом деле это противоположное поведение того, что я хотел: я хотел, onChildAdded функция onChildAdded завершилась, а затем вызывается функция onSingleValueListener которая выдает Test 1 для вызова. Есть ли причина, почему это происходит? В любом случае? Я был бы признателен за объяснение, почему это происходит. Благодаря!

 public void getComments(final String postId, final Activity activity, final View fragmentView, final View progressOverlay) { final Firebase commentsRef = firebaseRef.child("/comments"); Firebase linkRef = firebaseRef.child("/posts/" + postId); linkRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { System.out.println("Test 1"); if (progressOverlay.getVisibility() == View.VISIBLE) { progressOverlay.setVisibility(View.GONE); AndroidUtils.animateView(progressOverlay, View.GONE, 0, 200); fragmentView.findViewById(R.id.rv_view_comments).setVisibility(View.VISIBLE); } } @Override public void onCancelled(FirebaseError firebaseError) { } }); linkRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { commentsRef.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Comment comment = dataSnapshot.getValue(Comment.class); System.out.println("Test 2"); application.getCommentsRecyclerViewAdapter().getCommentsList().add(comment); application.getCommentsRecyclerViewAdapter().notifyDataSetChanged(); } @Override public void onCancelled(FirebaseError firebaseError) { } }); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(FirebaseError firebaseError) { } }); } 

С помощью этого кода "Firebase linkRef = firebaseRef.child("/posts/" + postId);" Я мог видеть, что вы используете устаревший API Firebase. Теперь он устарел!

Пожалуйста, обновите свой код до нового API Firebase 3.xx.

Ниже два независимых асинхронных вызова; На основе вашего прецедента вы можете использовать один из слушателей для чтения ваших данных.

 1. linkRef.addListenerForSingleValueEvent(new ValueEventListener() {}); 2. linkRef.addChildEventListener(new ChildEventListener() {}); 

Вы можете обратиться к документу firebase, чтобы получить дополнительную информацию о прослушивателях базы данных. https://firebase.google.com/docs/database/android/retrieve-data

С помощью следующего фрагмента кода вы можете получить и заполнить свой список комментариев.

 public void getComments(final String postId, final Activity activity, final View fragmentView, final View progressOverlay) { DatabaseReference commentsRef = firebaseRef.child("/comments"); DatabaseReference linkRef = commentsRef.child("/posts/" + postId); linkRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // Iterate through data-snapshot, and update your Adapter dataset for (DataSnapshot snapshot : dataSnapshot.getChildren()) { Comment comment = snapshot.getValue(Comment.class); application.getCommentsRecyclerViewAdapter().getCommentsList().add(comment); } application.getCommentsRecyclerViewAdapter().notifyDataSetChanged(); // Dismiss your loading progressbar if (progressOverlay.getVisibility() == View.VISIBLE) { progressOverlay.setVisibility(View.GONE); AndroidUtils.animateView(progressOverlay, View.GONE, 0, 200); fragmentView.findViewById(R.id.rv_view_comments).setVisibility(View.VISIBLE); } } @Override public void onCancelled(DatabaseError databaseError) { // Handle fail case here } }); 

Надеюсь, это поможет вам!

Вы можете использовать класс **FirebaseRecyclerAdapter** который команда Firebase предоставляет в FirebaseUI-Android (см. https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/ Com / firebase / ui / database / FirebaseRecyclerAdapter.java )

В вашем файле gradle добавьте строку ниже (проверьте здесь, чтобы номер последней версии в readme) компилировать 'com.firebaseui: firebase-ui-database: 0.4.3'