Cómo eliminar datos de firebase después de "n" días
Quiero borrar algunos datos antiguos de mi Friebase. Sabía que esta pregunta se hacía mucho aquí, pero todavía me cuesta trabajo hacerla funcionar.
Intento esta solución encontrada aquí:
- ¿Cuál es la diferencia entre usar add (). AddToBackStack (), add (). Detach () y replace (). AddToBackStack () en un FragmentTransaction?
- Android Retrofit Base64 @Body
- Cómo leer las propiedades de Android con Java
- Trivial: Obtener confirmación de correo electrónico enviado en android
- Plugin de servicio de fondo de Android en el teléfono
Chat de Firebase: eliminar mensajes antiguos
pero esto es desaprobado.
así que lo intento de esta manera:
ChildEventListener childEventListener = new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, -30); Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey()); String key = dataSnapshot.getKey(); Marker retrievemarker =dataSnapshot.getValue(Marker.class); Calendar t3 = new GregorianCalendar (c.get(Calendar.YEAR), c.get(Calendar.MONTH), retrievemarker.getSavedate()); int date1= calendar.get(Calendar.DATE); int date2= t3.get(Calendar.DATE); Log.d("date1",""+date1); Log.d("date2",""+date2); if( date1 == date2 ){ myRef.child(key).setValue(null); }
para explicación: En mi Firebase salvo un objeto llamado Marker, este objeto obtuvo una variable para almacenar el salvado, la fecha en que el objeto fue guardado en Firebase.
int date = c.get(Calendar.DATE); marker.setSavedate(date);
Quiero eliminar el objeto en Firebase después de 30 días. Así que trato de restar 30 días a partir de la fecha de hoy de lo que quiero comparar esto con el salvado del objeto si es igual a que se eliminará el objeto de la base de Firebase.
Para la Sustracción me refiero a la siguiente respuesta:
Cómo restar X días de una fecha con el calendario de Java?
Pero no funciona. Si añado un Objeto hoy a la Firebase las dos fechas son siempre iguales. Así que supongo que la substracción no funciona.
¿Qué estoy haciendo mal?
- Cómo pasar los datos del servlet a la aplicación android
- Cómo extraer el cursor y el valor entero de una matriz de clase Object
- Android: el teclado no aparece en la ventana flotante
- ¿Qué significa (savedInstanceState)
- Informe Leakcanary de pérdida de memoria usando Otto
- Android: Share ¿La intención de la imagen no funciona con Facebook?
- Cómo agregar un marcador pin en la vista de la imagen en android
- Acceso puntero nulo: los datos variables sólo pueden ser nulos en este lugar
Digamos que tiene una estructura de datos con nodos alineados con esto:
-KItqNxLqzQoLnUCb9sJaddclose time: "Thu Apr 28 17:12:05 PDT 2016" timestamp: 1461888725444
Cada uno de estos nodos tiene una propiedad timestamp
que indica cuándo se creó. De preferencia, establecería esta propiedad utilizando la marca de hora del servidor .
Con esta estructura de datos, puede crear fácilmente una consulta que sólo devuelve los elementos mayores de 30 días y los elimina:
long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS); Query oldItems = ttlRef.orderByChild("timestamp").endAt(cutoff); oldItems.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { for (DataSnapshot itemSnapshot: snapshot.getChildren()) { itemSnapshot.getRef().removeValue(); } } @Override public void onCancelled(DatabaseError databaseError) { } });
Mi estructura de Firebase es como -> firebaseurl.com/test/user_id/2017-05-12 y luego mis datos están estructurados con el tiempo Así que estoy usando
long cutoff = new Date().getTime()-TimeUnit.MILLISECONDS.convert(10, TimeUnit.DAYS); //Get days number for delete data
Fecha d = nueva Fecha (corte); SimpleDateFormat dateFormatGmt = nuevo SimpleDateFormat ("aaaa-MM-dd"); Cadena old_date = `dateFormatGmt.format (nueva fecha (corte)); // Obtener la fecha de borrado del contenido ref2 = new Firebase ("firebaseurl.com/test/user_id/" + user_id); // URL de Firebase ref2.child (old_date) .removeValue (); // Eliminar elemento
Esto funciona para mi
- Android piensa que no estoy cerrando mi base de datos! ¿Por qué?
- Android, pregunta rápida sobre vinculación de servicio