如何将lambda用于自定义SingleObserver



我有这个自定义的SingleObserver 类:

public abstract class SubscribeWithView<T> implements SingleObserver<T>,Disposable {

    private WeakReference<RootView> rootView;

    /**
     * <p style="color:blue;">set view from presenter</p>
     *
     * @param rootView
     *{@link RootView}
     */
    public SubscribeWithView(RootView rootView) {
        this.rootView = new WeakReference<>(rootView);
    }

    ...
}

所以我在 API 存储库接口类中使用以下代码:

@POST(ApiAddress.USER_LOGIN)
    Single<Response<UserWithToken>> userLogin(@Body UserLogin_request userLogin_request);

我的问题是:如何更改此代码:

.subscribe(new SubscribeWithView<Response<UserWithToken>>(view) {
                        @Override
                        public void onSuccess(Response<UserWithToken> response) {
                        }
                        @Override
                        public void onError(Throwable e) {
                            super.onError(e);
                        }

像这样对拉姆达?

apiRepository.userLogin(request)
                .subscribe(new SubscribeWithView<Response<UserWithToken>>(view) {
                    response->{},e->{});

不,Java 仅支持"函数接口"的 lambda。基本上,这意味着您不能将 lambda 与多个方法一起使用来实现。

而不是改造单,你可以像这样使用Rxjava单曲:

您的界面 :

    @GET("somehing")
   Single<UserWithToken> getUserWithTokenFromServer(@Query("something") String  something);

您的实施:

apiClient.getUserWithTokenFromServer("123456")
    .subscribe(UserWithToken -> {
        // handle data fetched successfully and API call completed
    },Throwable::printStackTrace);

最新更新