改造+ rxjava获取AbstractMethodError或在rxjava中调试

时间:2017-10-04 02:45:39

标签: java android rx-java

我是rxjava的新手。在subscriber()中我得到了java.lang.AbstractMethodError。我尝试跟踪subscriber()内部,发现schedular.worker是抽象的。在flatmap()内,我尝试根据响应获取解密的字符串。有人可以给我一个提示,或告诉我在rxjava中登录的最佳方法,任何信息都会受到赞赏吗?

错误

java.lang.AbstractMethodError: abstract method "rx.Scheduler$Worker rx.Scheduler.createWorker()"
        at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.<init>(OperatorObserveOn.java:87)
        at rx.internal.operators.OperatorObserveOn.call(OperatorObserveOn.java:61)
        at rx.internal.operators.OperatorObserveOn.call(OperatorObserveOn.java:41)
        at rx.Observable$2.call(Observable.java:170)
        at rx.Observable$2.call(Observable.java:166)
        at rx.Observable$2.call(Observable.java:173)
        at rx.Observable$2.call(Observable.java:166)
        at rx.Observable$2.call(Observable.java:173)
        at rx.Observable$2.call(Observable.java:166)
        at rx.Observable$2.call(Observable.java:173)
        at rx.Observable$2.call(Observable.java:166)
        at rx.Observable.subscribe(Observable.java:8672)
        at rx.Observable.subscribe(Observable.java:8541)
        at activity.setup.AddUserActivity.requestAddUser(AddUserActivity.java:356)
        at activity.setup.AddUserActivity.access$300(AddUserActivity.java:68)
        at activity.setup.AddUserActivity$1.onClick(AddUserActivity.java:168)
        at android.view.View.performClick(View.java:5198)
        at android.view.View$PerformClick.run(View.java:21147)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是我的代码

服务部分

@POST("/user/add/")
Observable<Response> addUser(@Field("phoneno") String str, @Field("deviceid") String str2,
           @Field("name") String str3, @Field("email") String str4);

主要部分

Subscription sub = service.addUser(phoneNo, deviceId, name, email)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(new Func1<Response, Observable<ServerResponse>>() {
                @Override
                public Observable<ServerResponse> call(final Response response) {
                    return Observable.create(new Observable.OnSubscribe<ServerResponse>() {
                        public void call(Subscriber<? super ServerResponse> subscriber) {
                            try {
                                String decryptedString = ResponseUtility.getDecryptedResponseBodyString(response);
                                ServerResponse serverResponse = (ServerResponse) new GsonBuilder().setLenient().create().fromJson(decryptedString.substring(decryptedString.indexOf("{"), decryptedString.length() - 1), ServerResponse.class);
                                if (!subscriber.isUnsubscribed()) {
                                    subscriber.onNext(serverResponse);
                                }
                                if (!subscriber.isUnsubscribed()) {
                                    subscriber.onCompleted();
                                }
                            } catch (Exception ex) {
                                if (!subscriber.isUnsubscribed()) {
                                    subscriber.onError(ex);
                                }
                            }
                        }
                    });
                }
            }).subscribe(new Observer<ServerResponse>() {
                @Override
                public void onCompleted() {
                    User user = new User(name, email, phoneNo, deviceId);
                    user.save();

                }

                @Override
                public void onError(Throwable e) {
                    dismissProgressDialog();
                    EventBus.getDefault().post(new ErrorEvent("error"));
                }

                @Override
                public void onNext(ServerResponse serverResponse) {
                    dismissProgressDialog();
                    if (serverResponse.isSuccessful()) {
                        EventBus.getDefault().post(new AddUserSucceeded());
                        return;
                    }
                    throw new RuntimeException("Error adding user to panel");
                }
            });
compositeSubcription.add(sub);

0 个答案:

没有答案
相关问题