我是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);