2016-10-26 4 views
0

Ich habe Android-Anwendung mit Methode, die Bild als Observable zurückgeben. Ich brauche dieses Bild, um es in button.setDrawable (Drawable) zu verwenden. Also brauche ich einen einfachen Drawable-Typ. Wie man Bild von dieser Rückkehranweisung so erhält?Observable <Drawable> zu einfach Drawable

Antwort

3

Also brauche ich einfache Drawable Typ. Wie man Bild von dieser Rückkehranweisung erhält?

müssen Sie die Observable abonnieren. Der Subscribe#onNext erhält den Drawable als Parameter. Beachten Sie, dass Sie setButton vom Ui-Thread aufrufen müssen. Denken Sie also daran, den rechten Thread (den UI-Thread) zu beobachten (observeOn).

bearbeiten

drawableObservable 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(new Subscriber<Drawable>() { 
     @Override 
     public void onCompleted() { 
     } 

     @Override 
     public void onError(Throwable e) { 
     } 

     @Override 
     public void onNext(Drawable drawable) { 
     } 
}); 

oder mit Lambda

drawableObservable 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(button::setBackground, Throwable::printStackTrace); 
+0

könnten Sie bitte Beispiel Code-Snippet teilen? –

+0

@ RafałPiekara, fertig. Schau mal – Blackbelt

+0

danke, und noch eine Frage. Wenn ich es in "subscribe" implementieren (drawable -> radioButton.setCompoundDrawablesWithIntrinsicBounds (null, null, zeichnungsfähig, null)); 'image ist nur sichtbar, wenn Button aktiviert ist. Ich möchte, dass dieses Bild ständig angezeigt wird. –

-1

Ihre beobachtbare Unter der Annahme Namen obs:

obs.toBlocking().first()

Dies wird blockiert, bis die Auslosungs durch die beobachtbaren emittiert wird.

Alternativ subscribe() verwenden, um das Drawable zu erhalten, sobald es vom Observable ausgegeben wird, ohne zu blockieren.

Wenn Sie so lange blocken möchten, bis das Observable fertig ist, bevor Sie setDrawable() aufrufen, verwenden Sie toBlocking. Wenn Sie möchten, dass es immer dann auftritt, wenn das Observable (als Callback) fertig ist, subscribe

+0

Es ist schlechte Form Observable in Sperrobjekte zu verwandeln. –

+0

Das stimmt nicht, es kommt auf den Anwendungsfall an. Es gibt viele Fälle, in denen Sie auf ein Ergebnis warten und es dann zurückgeben müssen. – Malt

Verwandte Themen