2017-01-09 14 views
11

rxjava Observable<Void> वापस जाने के लिए इस्तेमाल किया 1.xi का उपयोग करते समय पुराना वापस से खाली प्रतिक्रिया को संभालने के लिए:पुराना वापस और rxjava 2.x के साथ खाली प्रतिक्रिया संभाल

@POST("login") 
Observable<Void> getToken(@Header("Authorization") String authorization, 
             @Header("username") String username, 
             @Header("password") String password); 

लेकिन rxjava 2.x Void के साथ कुछ भी उत्सर्जन नहीं होगा के बाद से क्या उन खाली प्रतिक्रियाओं को संभालने के लिए कोई अच्छा अभ्यास है?

उत्तर

24

Completable ऐसे मामलों के लिए डिज़ाइन किया गया था। यह since आरएक्सजेवा 1.1.1 उपलब्ध है। आधिकारिक दस्तावेज़ों से:

किसी भी मूल्य के बिना स्थगित गणना का प्रतिनिधित्व करता है लेकिन पूरा होने या अपवाद के लिए केवल संकेत। कक्षा एक समान घटना पैटर्न का पालन करती है जैसे प्रतिक्रियाशील-स्ट्रीम: ऑन सदस्यता (ऑनरर | ऑन कॉम्प्लेट)?

तो बस अपने विधि की वापसी प्रकार बदलने:

@POST("login") 
Completable getToken(@Header("Authorization") String authorization, 
        @Header("username")  String username, 
        @Header("password")  String password); 

और आपके ग्राहक, उदा .:

apiManager.getToken(auth, name, pass) 
    ... 
    .subscribe(() -> { 
     //success 
    }, exception -> { 
     //error 
    }); 
-1

आप की कोशिश की फिर से लिखने Observable<Object> का उपयोग कर?

enum Irrelevant { INSTANCE; } 

Observable<Object> source = Observable.create((ObservableEmitter<Object> emitter) -> { 
    System.out.println("Side-effect 1"); 
    emitter.onNext(Irrelevant.INSTANCE); 

    System.out.println("Side-effect 2"); 
    emitter.onNext(Irrelevant.INSTANCE); 

    System.out.println("Side-effect 3"); 
    emitter.onNext(Irrelevant.INSTANCE); 
}); 

source.subscribe(e -> { /* Ignored. */ }, Throwable::printStackTrace); 
0

एक अन्य समाधान है:

@POST("login") 
Observable<Response<Void>> getToken(@Header("Authorization") String authorization, 
             @Header("username") String username, 
             @Header("password") String password); 

यह RxJava 2 की आधिकारिक दस्तावेज से है

संबंधित मुद्दे