2016-02-24 69 views
0

我有一個應用程序,監視傳感器事件,轉換它們,並需要向上推送訂閱者。RxJava/RxAndroid - 來自傳感器的無限事件流

作爲示例,請使用android.location.LocationManager進行位置更改。轉換可能包括使用原始的lat/longGeoCoder來獲得Address

如何建模我的顯示器(LocationListener)和發佈者?

class MyLocationListener implements LocationListener { 
    void onLocationChanged(Location l) { 
     //Get Address using GeoCoder 
    } 
} 


class MetaAPI { 
    Observable<Address> address() { 
     return Observable.create({what}); //<-- What should I add here? 
     //Need to glue MyLocationManager and MetaAPI 
    } 
} 

//So that I can use like this --> 
public AddressObservation { 
    void monitor() { 
     metaApi.address() 
      .subscribe(...) 
      ...; 
    } 
} 

回答

1

您可以使用Subject來達到此目的。這只是主要想法,沒有任何設計考慮因素(根據您的情況適應您的情況):

class MyLocationListener implements LocationListener { 
    void onLocationChanged(Location l) { 
     //Get Address using GeoCoder 
     MetaAPI.subject.onNext(null /* actual address object */); 
    } 
} 

class MetaAPI { 

    static Subject<Address, Address> subject = PublishSubject.<Address>create().toSerialized(); 

    Observable<Address> address() { 
     return subject; 
    } 
} 
+0

讓我給一個鏡頭。據我所知'Subject = Observable + Observer'組合。 –

+0

@MasterGaurav正確,'Subject'是'Observable'的事實可以讓你將它作爲一個返回,而不會將這個實現細節公開給'address()'方法的客戶端。 – AndroidEx

+0

是的......那就是我的意思。 –

相關問題