我想在浏览网页和RxDoc之后从AsyncTask更改为RxJava,我找不到任何解决方案。任何人都有任何想法?
public void getRegId(){
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
}
regid = gcm.register(PROJECT_NUMBER);
msg = "Device registered, registration ID=" + regid;
Log.i("GCM", msg);
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
@Override
protected void onPostExecute(String msg) {
etRegId.setText(msg + "\n");
}
}.execute(null, null, null);
}
答案 0 :(得分:2)
以下示例说明如何使用RxJava包装方法:
Observable.defer(new Func0<Observable<String>>() {
@Override
public Observable<String> call() {
String msg = doSomeWork();
return Observable.just(msg);
}
}).subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(String msg) {
etRegId.setText(msg + "\n");
}
});
答案 1 :(得分:2)
您可以使用RxGcm。
这是Google Cloud Messaging的一个包装器,可以摆脱服务配置,根据应用程序状态处理前台和后台通知。
经过一些设置后,您可以按如下方式注册设备:
RxGcm.Notifications.register(context)
.subscribe((token) -> //send to your server?);
我希望你觉得它很有用。