我在我的应用程序中使用MVVM。我希望以更好的方式在我的viewmodel或存储库中获取上下文。
让我假装我有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类中有上下文,您可以使用它。