Operadores RxJava
Estoy aprendiendo rxjava usando este artículo: http://blog.danlew.net/2014/09/22/grokking-rxjava-part-2/ y no puedo reproducir el primer ejemplo de este artículo que hice a continuación:
Observable<List<String>> query(String text); //Gradle: error: missing method body, or declare abstract @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); query.subscribe(urls -> { //Gradle: error: cannot find symbol variable query for (String url : urls) { System.out.println(url); } }); }
Pero tengo un error, que he añadido como comentarios ¿Qué hice mal?
- Retrofit2 y kotlin
- Utilice RxJava y Retrofit para iterar a través de la lista y aumentar los resultados basados en subconsultas
- Android AsyncTask vs hilo + controlador vs rxjava
- RxJava solo planificador de hilos de fondo
- Suscribir 2 diferentes Observable y onNext ambos?
- Comprensión de flujos de datos y múltiples suscriptores (con retroadaptación)
- Usando RxJava para encadenar una serie de operaciones - ¿a dónde ir después?
- RxBindings para Spinner?
- RxJava / RxBinding: cómo manejar los errores en RxView
- Retorno combinado observable sólo si una condición coincide
- InterruptedIOException al cambiar de mainThread () a io ()
- AndroidRX - ejecuta el método en segundo plano
- Obtenga el objeto JSON uno por uno desde la matriz JSON en Android utilizando Retrofit y RxJava
Java 8 lambdas a un lado, la mayoría de la gente aquí está perdiendo el hecho de que su código no compilará independientemente de RetroLambda o cualquier otra herramienta astuta que encuentre en algún lugar para trabajar alrededor de la función lambda …
Por lo tanto, echar un vistazo a su código, incluso había añadido algunos comentarios al fragmento que en realidad están explicando por qué están teniendo algunos errores de compilación:
1 Usted tiene un método con un cuerpo vacío :
Observable<List<String>> query(String text);
Por lo tanto, agregue un cuerpo de método y el problema resuelto. ¿Qué quieres hacer? ¿Todavía no lo sabes? A continuación, agregue un maniquí o cuerpo vacío y el trabajo que a cabo más tarde:
Observable<List<String>> query(String text) { return Observable.just(Arrays.asList("url1", "url2")); }
2 No hay ninguna variable de query
en absoluto en su código . Lo que tienes es un método de query
y la sintaxis para usar métodos requiere que uses los paréntesis:
query("whatever").subscribe(urls -> { for (String url : urls) { System.out.println(url); } });
Ahora agregue el RetroLambda o use clases anónimas y ya está. Tenga en cuenta que nada de esto agregará mucha funcionalidad a su código, pero resolverá sólo esos errores de compilación. Ahora pregúntate qué quieres hacer en tu método de consulta y continúa.
Nota : Un objeto Observable es un flujo de datos, lo que básicamente significa que puede obtener elementos cero, un elemento o muchos; Todas ellas instancias del tipo especificado. Por lo tanto, su código parece esperar una secuencia de listas de cadenas, si lo que realmente desea es una secuencia de cadenas, luego reemplace Observable<List<String>>
por Observable<String>
.
Por Gradle: error:
quieres decir error de compilación? Probablemente debería poner paréntesis entre la query
y .subscribe(urls -> {
ya que esto no es una variable o una clase archivada pero el método en su lugar, por lo que debe llamar para obtener Observable
para suscribirse a.
Bueno, también es necesario implementar el método de consulta para volver Observable
, por ejemplo, como este:
private Observable<String> query() { return Observable.just("one", "two", "three"); }
Obtendrá otro error de compilación debido a Java 8, pero como ya se mencionó en los comentarios que usted puede utilizar fácilmente retrolamda con gradle para solucionar el problema. De lo contrario, puede utilizar Android Studio correcciones rápidas para convertir java 8 lambdas en java 6 clases anónimas.
- Cambiar el mensaje de notificación de android sin parar y volver a iniciar el servicio
- Cómo compartir archivos de texto con ACTION_SEND