Obtener los datos de la Firebase en el límite para realizar pull para actualizar y cargar más funcionalidad

Sin embargo, ahora estoy recibiendo todos los datos de la FireBase al mismo tiempo. Lo que quiero hacer que obtener los datos en LIMITES como 15 registros a la vez. Al igual que en la primera vez que el usuario obtener los 15 registros de la base de Firebase y cuando el usuario carga más datos en la parte inferior / superior de la pantalla de 15 más registros deben venir de Firebase y añadido a la parte inferior / TOP de la lista.

He implementado la lógica para obtener los 15 registros en una parte superior o inferior de la base de datos de Firebase como a continuación: –

 public class ChatActivity extends AppCompatActivity implements FirebaseAuth.AuthStateListener { private FirebaseAuth mAuth; private DatabaseReference mChatRef; private Query postQuery; private String newestPostId; private String oldestPostId; private int startAt = 0; private SwipeRefreshLayout swipeRefreshLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); mAuth = FirebaseAuth.getInstance(); mAuth.addAuthStateListener(this); mChatRef = FirebaseDatabase.getInstance().getReference(); mChatRef = mChatRef.child("chats"); /////GETTING THE VIEW ID OF SWIPE LAYOUT swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); /////GETTING FIRST 10 RECORDS FROM THE FIREBASE HERE mChatRef.limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot child : dataSnapshot.getChildren()) { oldestPostId = child.getKey(); System.out.println("here si the data==>>" + child.getKey()); } } @Override public void onCancelled(DatabaseError databaseError) { } }); //////FOR THE PULL TO REFRESH CODE IS HERE swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { // Refresh items System.out.println("Here==>>> "+oldestPostId); ///HERE "oldestPostId" IS THE KEY WHICH I GET THE LAST RECORDS FROM THE FIREBASE mChatRef.startAt(oldestPostId).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot child : dataSnapshot.getChildren()) { System.out.println("here AFTER data added==>>" + child.getKey()); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } }); } 

He buscado aquí en SO por ello, pero no obtuve el resultado esperado, debajo del enlace que he buscado

1. Primer Enlace
2. Segundo vínculo
3. Tercer Enlace
4. Forth Enlace

Por favor, mire mi estructura de datos de firebase en la imagen.
Datos de firebase

He implementado la lógica para la obtención de 15 OR 10 registros a la primera vez y funciona .. y también implementó la lógica para cargar más registros en los límites, pero no conseguir la solución adecuada (NO TRABAJO) , por favor ayuda y hágamelo saber dónde estoy Haciendo mal..Gracias 🙂

Te falta orderByKey() . Para cualquier consulta de filtrado debe utilizar las funciones de pedido. Consulte la documentación

En el método onRefresh , debe establecer el límite:

  public void onRefresh() { // Refresh items ///HERE "oldestPostId" IS THE KEY WHICH I GET THE LAST RECORDS FROM THE FIREBASE mChatRef.orderByKey().startAt(oldestPostId).limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() { ..... 

Así que los datos que recupera son los únicos 10 nuevos registros después de obtener sus primeros 10 registros.

Asegúrese de guardar la clave más antigua de los datos recién recuperados para que en la próxima actualización los nuevos datos de esta clave sólo se recuperen.

Sugerencia: En lugar de agregar un oyente de valor secundario para encontrar la última clave, sólo puede utilizar el oyente de valores y obtener la última instantánea de datos con el tamaño para obtener la clave del último registro.

Reestructurar su base de datos, establecer un nuevo id de niño que es incremental como 0,1,2,3 … etc

 "chats": { "-KZLKDF": { "id": 0, "message": "Hi", "name":"username" }, 

Luego haga un método para la consulta

 public void loadFromFirebase(int startValue,int endValue){ mChatRef.orderByChild(id).startAt(startValue).endAt(endValue).addListenerForSingleValueEvent(this); } 

Asegúrese de que ha implementado addListenerForSingleValueEvent, a continuación, haga la tarea relacionada con el adaptador. Inicialmente llamar desde el método onCreate:

 loadFromFirebase(0,10); 

Nota: cargar contenido nuevo en la lista que debe tener en cuenta con el adaptador.

  • Propósito del cliente de la autenticación Firebase de Android de clave de API
  • Filtra los datos en firebase con SearchView
  • Los datos extraídos de FirebaseDatabase se muestran en 3 AlertDialogs separados en lugar de uno
  • Firebase-Android, No puede guardar datos después de mucho tiempo inactivo
  • Manejando keepSynced () mientras está en segundo plano en Android y con FCM
  • FirebaseRecyclerAdapter y multiplicar tipos de elementos en android
  • Integración Algolia Firebase y Android
  • Error "java.lang.StackOverflowError:" al intentar guardar el objeto en base de datos Firebase
  • Android Firebase - almacenamiento de datos sin autenticación
  • ¿Qué es firebase y cómo usarlo en Android?
  • ¿Cómo almacenar datos en base de datos en tiempo real en firebase durante el registro de usuario?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.