如何在ViewModel中获取上下文

问题描述 投票:0回答:1

我在我的应用程序中使用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

android mvvm viewmodel
1个回答
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类中有上下文,您可以使用它。

© www.soinside.com 2019 - 2024. All rights reserved.