Manera correcta de extender ParseObject y tener una fábrica de consultas genéricas
Necesito una forma de consultar diferentes clases de análisis basado en las opciones hechas por un usuario. Abordé el problema de la siguiente manera. Aconseje por favor cómo arreglar el problema que tengo o sugiero el acercamiento alternativo / mejor.
Tengo clases A, B, C, ...
que corresponden a las clases de Parse. Ellos son muy similares. Por lo tanto, he creado clase abstracta Q
:
- ParseException: Error de token de sesión no válido
- La notificación de Parse Push no funciona en android
- DondeNuestra consulta no parece funcionar correctamente en Parse
- SaveAllInBackground no funciona dentro de deleteAllInBackground como se desee
- Salir o cambiar cuentas usando Parse Twitter / Facebook Authentication
public abstract class Q extends ParseObject { // some shared methods public abstract ParseQuery<? extends Q> getQuery(); }
Cada uno de A, B, C, ...
se define como:
@ParseClassName("A") public class A extends Q { private static final A INSTANCE = new A(); @Override public ParseQuery<A> getQuery() { return ParseQuery.getQuery(A.class); } public static A getInstance(){ return INSTANCE; } }
Tengo el siguiente adaptador de reciclado para mi vista de reciclado:
public class QAdapter extends ParseRecyclerQueryAdapter<Q,QAdapter.MyViewHolder>{ ... }
El error que estoy recibiendo ocurre en la siguiente línea en mi activty:
mRecyclerAdapter = new QAdapter(this, factory, true);
El mensaje de error es:
Error:(58, 70) error: incompatible types: QueryFactory<CAP#1> cannot be converted to QueryFactory<Q> where CAP#1 is a fresh type-variable: CAP#1 extends Q from capture of ? extends Q
Intenté hacer la definición de la clase del adaptador genérica como public class QAdapter<T extends Q> extends ParseRecyclerQueryAdapter<T, QAdapter.MyViewHolder> {... }
, con todo esto introdujo otro error que dice que QAdapter no aplicó onBindViewHolder
aunque es implementado.
- Problema de notificaciones push de Parse.com. Anular la suscripción no funciona, sigue recibiendo notificaciones push (Android).
- ¿Puedo enlazar a una persona con twitter y facebook en parse?
- Parse.com - Enviar duplicado después de reinstalar la aplicación
- Parse: ¿Cómo configurar un puntero en Android?
- Analizar: Recibe devolución de llamada cuando se completa el registro de GCM
- ¿Cómo implementar múltiples notificaciones push de GCM en una sola aplicación?
- Cómo anular onPushReceive () de ParsePushBroadcastReceiver?
- Eliminar una fila de la tabla Parse
Esto puede no funcionar, pero intentaría reemplazar
public class QAdapter extends ParseRecyclerQueryAdapter<Q,QAdapter.MyViewHolder>{ ... }
con
public class QAdapter extends ParseRecyclerQueryAdapter<? extends Q,QAdapter.MyViewHolder>{ ... }
Trate de reemplazar
extends ParseRecyclerQueryAdapter<T, QAdapter.MyViewHolder> {... }
con
extends ParseRecyclerQueryAdapter<T extends ParseObject, QAdapter.MyViewHolder> {... }
Esta es la forma de hacer mi ParseRecyclerQueryAdapter trabajo
Bueno, como dice el viejo refrán, "asegúrese de que todo es contiguo" o algo así. Usted tiene una gran idea para un resumen y lo está haciendo bien, pero tal vez usted acaba de obtener un problema de herencia al no tener la misma llamada emitida por los mismos parámetros que cumplió el procesador. Como <? extends Q,...>
<? extends Q,...>
Así que en ese caso usted tiene que asegurarse de que todo es redundante. ¡Buena suerte!
Debe hacer su clase base Q genérica:
public abstract class Q<T extends Q<T>> extends ParseObject { // some shared methods public abstract ParseQuery<T> getQuery(); }
Entonces su clase A se convierte en
@ParseClassName("A") public class A extends Q<A> { private static final A INSTANCE = new A(); @Override public ParseQuery<A> getQuery() { return ParseQuery.getQuery(A.class); } public static A getInstance(){ return INSTANCE; } }
Y ParseQuery es:
public class ParseQuery<T> { public static <T> ParseQuery<T> getQuery(Class<T> clazz) { return null; } }
- Mensaje de logcat de Android (E / SMD: DCD activado)
- La indexación de aplicaciones con signo comercial en Deep Link no funciona