我正在为应用程序使用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
答案 0 :(得分:0)
在构造函数中,添加一个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类中具有上下文,并且可以使用它。