【问题标题】:How to use of lambda for custom SingleObserver如何将 lambda 用于自定义 SingleObserver
【发布时间】:2019-01-15 09:07:23
【问题描述】:

我有这个自定义的 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);
                        }

像这样的 lambda?

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

【问题讨论】:

  • 你为什么不使用 subscribe(Consumer, Consumer) 并简单地让 lambda-capture 为你提供 view,你可以从两个 lambdas 访问它。

标签: java android lambda rx-java retrofit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以像这样使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2023-03-27
      • 2016-11-27
      • 2021-12-01
      • 1970-01-01
      • 2017-04-15
      • 2016-07-05
      相关资源
      最近更新 更多