android - 如何在 ViewModel 中获取上下文
问题描述
我正在为我的应用程序使用 MVVM。我想以更好的方式在我的视图模型或存储库中获取上下文。
假设我有 UserRepository() 类
public class UserRepository {
UserDao userDao;
Executor executor;
public UserRepository() {
this.userDao = AppDatabase.getAppDatabase(MApplication.context).userDao();
executor = Executors.newSingleThreadExecutor();
}
public void clearUserCached() {
executor.execute(() -> {
userDao.deleteAll();
});
}
public void loginUser(String email, String password) {
getAPIService().login(new LoginRequest(email, password))
.compose(RxUtils.applySchedulers())
.subscribe(
(LoginResponse response) -> {
executor.execute(() -> {
userDao.insert(response.getUser());
});
},
(Throwable e) -> {
e.printStackTrace();
}
);
}
public LiveData<User> getUser() {
return userDao.getUser();
}
}
我知道使用MApplication.context
不是一个好方法。这是内存泄漏。
获取上下文的另一种方法是什么?
注意:我没有使用 Dagger2
解决方案
在您的构造函数中,添加一个 Context 参数,然后,当您想要使用此类时,将上下文传递给它并在 viewModel 中的任何位置使用该上下文。像这样:
Context context;
public UserRepository(Context context) {
this.userDao = AppDatabase.getAppDatabase(MApplication.context).userDao();
executor = Executors.newSingleThreadExecutor();
context.this = context;
}
并假设您的主要活动正在使用 UserRepository 类:
UserRepository userRepository = new UserRepository(MatinActivity.this);
然后,您的 UserRepository 类中有上下文,您可以使用它。
推荐阅读
- python - 如何在 Python(Flask) 中模拟一个函数
- ruby-on-rails - 如何在rails中使用form_with和self join?
- android - Android kotlin - Navhost 片段 - 从菜单弹出
- macos - Mac 和 UWP 中 LibVLCSharp VideoView 的自定义渲染器 (Xamarin.Forms)
- javascript - 追加和填充下拉列表多个javascript
- python - 用python(Duffing振荡器)求解非线性非齐次微分方程
- colors - 仅特定页面中的wordpress css背景颜色
- python - 使用烧瓶从 python 调用 julia 返回错误
- javascript - 让组件显示已在 React 中循环的数据的最佳方式
- java - 我无法为数组索引赋值。我必须为各个变量赋值