小编Ger*_*rke的帖子

如何在 2020/21 的活动中获取 ViewModel 的实例?

我是 mvvm 模式的新手。我为主要活动创建了一个 ViewModel。现在我想在主活动中获取 ViewModel 的一个实例。

Stackoverflow 上的大多数教程和答案都建议使用ViewModelProviders.of(...,但已弃用。

因此,根据stackoverflow上的这个问题:ViewModelProviders is deprecated in 1.1.0 main activity in onCreate,我执行以下操作(我可以发誓我已经运行了它):mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

但是,我收到一个错误消息,告诉我没有找到合适的构造函数。

error: no suitable constructor found for ViewModelProvider(MainActivity)

或者,绝对清楚,MainActivity 应为 ViewModelStoreOwner,我创建了一个变量 ViewModelStoreOwner vmso = this;并将该变量放入构造函数中,如下所示: mainActivityViewModel = new ViewModelProvider(vmso).get(MainActivityViewModel.class);

android mvvm viewmodel androidx viewmodelproviders

24
推荐指数
5
解决办法
2万
查看次数

Service 和 ViewModel 之间的 MVVM 通信

我有一个Service每秒通过 http 请求加载数据的程序。

我想知道如何在我当前的 MVVM 结构中实现该服务。

我能想到的解决方案是:

  1. View调用方法来自ViewModel
  2. ViewModel调用方法来自Repository
  3. 启动ServiceRepository传入 some LiveData,因为存储库应该负责数据加载。
  4. LiveDataServicevia中更新此内容postValue()
  5. 在 UI 中观察这一点LiveData并通知ViewModel更改
  6. 获取ViewModel更改LiveData并相应更新视图的其他 LiveData
  7. Service根据步骤 6 的结果停止

但是,我想知道是否有更好的解决方案可以更直接地从ServiceViewModel甚至从ServiceRepository进行通信ViewModel

android android-service android-mvvm android-architecture-components

5
推荐指数
0
解决办法
1904
查看次数

OkHttp 添加基本认证头

我想将基本身份验证标头添加到我使用 OkHttp3 完成的请求中。

这是我的代码:

        // Adding Authentication Header
        OkHttpClient.Builder client = new OkHttpClient.Builder();
        client.authenticator(new Authenticator() {
            @Override
            public Request authenticate(Route route, Response response) throws IOException {
                String credential = Credentials.basic(username, password);
                return response.request().newBuilder().header("Authorization", credential).build();
            }
        });

        // 
        client.connectTimeout(10, TimeUnit.SECONDS);
        client.writeTimeout(10, TimeUnit.SECONDS);
        client.readTimeout(10, TimeUnit.MINUTES);

        RequestBody body = RequestBody.create(null, new byte[]{});
        if( json != null) {
            body = RequestBody.create(MediaType.parse(
                    "application/json"),
                    json.toString()
            );
        }

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        client.build().newCall(request).enqueue(callback);
Run Code Online (Sandbox Code Playgroud)

不幸的是没有添加身份验证标头,我真的找不到错误。

android okhttp

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