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?

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.

  • RxJava y eventos esporádicos al azar en Android
  • ¿Cómo puedo implementar el equivalente RxJava de INotifyPropertyChanged para hacer un modelo de datos Observable?
  • Prueba de desplazamiento sin fin RecyclerView con Espresso y RxJava
  • Cómo cancelar la solicitud con retofit2 y RxAndroid
  • Añadir RxJava Observer en cadena dependiendo de una condición
  • Observable OnCompleted no puede actualizar la interfaz de usuario
  • RxJava2 función de rebote no funciona correctamente en RecyclerView - Android
  • MissingBackpressureException incluso después de llamar a onBackpressureBlock ()
  • Manejo de excepciones API en RxJava
  • Cómo emitir elementos de una lista con retraso en RxJava?
  • Sustitución de EventBus por RxJava - N suscriptores siempre escuchando
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.