我想在浏览完web和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);
    }

最佳答案

下面是一个示例,演示如何用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");
                }
            });

关于android - 使用RxJava注册Google GCM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34738038/

10-12 04:12