Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用RxJava注册Google GCM_Android_Rx Java - Fatal编程技术网

Android 使用RxJava注册Google GCM

Android 使用RxJava注册Google GCM,android,rx-java,Android,Rx Java,我想从AsyncTask改为RxJava,在浏览了web和RxDoc之后,我没有找到任何解决方案。有人知道吗 public void getRegId(){ new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String msg = "";

我想从AsyncTask改为RxJava,在浏览了web和RxDoc之后,我没有找到任何解决方案。有人知道吗

 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);
    }
public void getRegId(){
新建异步任务(){
@凌驾
受保护字符串doInBackground(无效…参数){
字符串msg=“”;
试一试{
如果(gcm==null){
gcm=GoogleCloudMessaging.getInstance(getApplicationContext());
}
regid=gcm登记册(项目编号);
msg=“设备已注册,注册ID=“+regid;
Log.i(“GCM”,msg);
}捕获(IOEX异常){
msg=“错误:”+ex.getMessage();
}
返回味精;
}
@凌驾
受保护的void onPostExecute(字符串msg){
etRegId.setText(msg+“\n”);
}
}.执行(空,空,空);
}

下面是一个示例,演示如何使用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");
                }
            });
Observable.defer(新函数0(){
@凌驾
公共可观测呼叫(){
字符串msg=doSomeWork();
可观察的返回值。just(msg);
}
}).subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
已完成的公共void(){}
@凌驾
公共无效者(可抛弃者){}
@凌驾
public void onNext(字符串消息){
etRegId.setText(msg+“\n”);
}
});
您可以使用

它是Google云消息的包装器,用于摆脱服务配置,根据应用程序状态处理前台和后台通知

经过一些设置后,您可以按如下方式注册设备:

    RxGcm.Notifications.register(context)
            .subscribe((token) -> //send to your server?);

我希望你觉得它有用

事实上,我正在使用它,它有点棒!