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: –
- ¿Cómo actualizar la referencia de consulta de un adaptador de reciclador de reciclaje?
- Robolectric app testing con Firebase
- Utilizar DB de Firebase con DB local
- Crear usuario en la base de datos después de Firebase Auth (android)
- Agregue al oyente táctil para Firebase RecyclerView
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.
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 🙂
- E / DynamiteModule: Error al cargar la clase del descriptor del módulo: No encontró la clase
- Credenciales de la cuenta de servicio de Firebase Permiso de lectura de Json leído
- ¿Cómo agregar más elementos a FirebaseRecyclerAdapter?
- Firebase para Android no funciona en mi dispositivo de prueba de repente
- ¿Cómo puedo solucionar el error de Android Firebase "Default FirebaseApp no se inicializa en este proceso"?
- Clasificación de la posición de los elementos mediante FirebaseRecyclerAdapter
- Implementar una función de recibo de lectura en la aplicación de mensajería de grupo de Firebase
- Chat uno a uno de Firebase
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.
- Compruebe la conexión de red y de Internet – Android
- ¿Hay alguna manera de recibir un evento de espera de la CPU en Android?