我是 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);
我有一个Service每秒通过 http 请求加载数据的程序。
我想知道如何在我当前的 MVVM 结构中实现该服务。
我能想到的解决方案是:
View调用方法来自ViewModelViewModel调用方法来自RepositoryService并Repository传入 some LiveData,因为存储库应该负责数据加载。LiveData在Servicevia中更新此内容postValue()。LiveData并通知ViewModel更改ViewModel更改LiveData并相应更新视图的其他 LiveDataService根据步骤 6 的结果停止但是,我想知道是否有更好的解决方案可以更直接地从Service到ViewModel甚至从Service到Repository进行通信ViewModel
android android-service android-mvvm android-architecture-components
我想将基本身份验证标头添加到我使用 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 ×3
android-architecture-components ×1
android-mvvm ×1
androidx ×1
mvvm ×1
okhttp ×1
viewmodel ×1