2016-03-05 1 views
4

J'ai créé une fonction qui renvoie un Observable<String> avec des noms de fichiers, mais je n'obtiens aucun événement dans mon abonnement où j'appelle cette méthode. De plus il n'y a pas d'appel de onError ou onComplete
Voir mon code:L'abonnement rx kotlin ne fonctionne pas, ne reçoit pas les articles

fun getAllFiles(): Observable<String> { 

    val allFiles = File("/Users/stephan/Projects/Playground/kotlinfiles/") 
      .listFiles { file -> !file.isDirectory() } 
    return observable { subscriber -> 
     allFiles.toObservable() 
       .map { f -> "${f.name}" } 
       .doOnNext { println("Found file $it") } 
       .subscribe { subscriber} 
    } 
} 

fun test() { 
    getAllFiles() 
      .doOnNext { println("File name$it") } 
      .subscribe(
        {n -> println("File: $n")}, 
        {e -> println("Damn: $e")}, 
        {println("Completed")}) 
} 

Bien que tout est appelé dans la fonction getAllFiles(), donc ce que je manque?

Répondre

8

observable est pour créer un Observable à partir de zéro, mais vous avez déjà Observable<String> de toObservable() de sorte que vous n'en avez pas besoin. Le code ci-dessous fonctionne pour moi:

fun getAllFiles(): Observable<String> { 
    val allFiles = File("/Users/stephan/Projects/Playground/kotlinfiles/") 
    .listFiles { file -> !file.isDirectory } 
    return allFiles.toObservable() 
    .map { f -> "${f.name}" } 
} 

fun test() { 
    getAllFiles() 
    .doOnNext { println("File name $it") } 
    .subscribe(
     { n -> println("File: $n") }, 
     { e -> println("Damn: $e") }, 
     { println("Completed") }) 
} 

Vous pouvez également résoudre ce problème en changeant de:

.subscribe{subscriber} 

à

.subscribe(subscriber) 

mais la version imbriquée Observable est source de confusion pour moi.

+0

votre réponse fonctionne, mais je me demande pourquoi 'toObservable()' est utilisé dans les exemples de rxkotlin. https://github.com/ReactiveX/RxKotlin/blob/0.x/src/examples/kotlin/rx/lang/kotlin/examples/examples.kt#L45 – EarlOfEgo

+0

@EarlOfEgo un peu bizarre. Je suppose que juste pour la démonstration. Si vous vérifiez l'histoire de git, vous verrez comment cela se passe. À un tout premier engagement, cela a plus de sens: https://github.com/ReactiveX/RxKotlin/commit/d365846fa8502566132fd8d53b7e83aaa5bc452e#diff-3f0526ee70e691c01cb9149a4ccbca03R32 – pt2121