小编Dev*_*per的帖子

Android服务与MVVM中的活动的通信(模型视图模型)

我刚刚开始使用kotlin在android中使用MVVM。我创建了一个仅获取用户位置的Android服务。该服务在后台不断运行,并使用FusedLocationApi来获取位置。我一直在阅读有关在MVVM中使用后台服务的文章。我发现最有帮助的文章是此Android Service MVVM通信。它说您必须在android服务和视图模型进行通信时使用存储库。但我也发现了一些文章,指出不要在View Model中使用Android Framework类(不要在View Model中使用Android类)。我完全困惑您如何将MVVM中的活动与Android服务进行通信。我们要么为此使用存储库,要么如何实现它。

任何帮助将不胜感激,

android mvvm viewmodel android-service kotlin

5
推荐指数
1
解决办法
378
查看次数

Android:使用Rx Android和Retrofit的NetworkOnMainThreadException

使用rx android和改造时,我在线程异常上得到网络。这是我的代码:

public Observable<PostVariablesModel> requestApiItem() {
        return getauthenticationtoken.getToken().flatMap(new Func1<String, Observable<PostVariablesModel>>() {

            public Observable<PostVariablesModel> call(String token) {
                return service.postdata(value1, value2, value3, token);
            }
        }).subscribeOn(Schedulers.io());
    }


    public void postdata() {
        requestApiItem()   //I think problem is here any idea?
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<PostVariablesModel>() {
                    @Override
                    public void onCompleted() {
                        System.out.print("Complete");
                    }

                    @Override
                    public void onError(Throwable e) {
                        System.out.print("Fail");
                    }

                    @Override
                    public void onNext(PostVariablesModel apiResult) {
                        System.out.print(apiResult.toString());
                    }
                });
    }
Run Code Online (Sandbox Code Playgroud)

完成http调用后,我们是否需要取消订阅。任何的想法?

例外在下面给出。我在代码中的postdata方法的onError上收到此异常:

android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
                                                                      at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
                                                                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
                                                                      at java.net.InetAddress.getAllByName(InetAddress.java:215)
                                                                      at okhttp3.Dns$1.lookup(Dns.java:39)
                                                                      at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:170) …
Run Code Online (Sandbox Code Playgroud)

android retrofit rx-android

2
推荐指数
1
解决办法
2128
查看次数