小编Ikh*_*hai的帖子

使用LiveData从网络刷新数据

我正在研究一个查询github API的应用程序以获取用户列表,而我正在遵循推荐的android 体系结构组件指南。从网络中获取数据后,我将使用Room DB将其存储在本地,然后使用在LiveData对象上观察到的ViewModel将其显示在UI上(这很好)。但是,我希望有一个按钮,当且仅当存在网络连接时,单击该按钮将触发刷新操作并执行网络请求以从API获取新数据。问题是,当我单击该按钮时,将触发两个网络调用,一个来自refreshUserData(),另一个来自已存在的LiveData(在onCreate()期间触发)。我应如何最好地处理这种情况,以使刷新按钮仅执行一个网络请求,而不执行两个网络请求。这是我的存储库类:

public class UserRepository {
private final UserDao mUserDao;
private LiveData<List<GitItem>> mAllUsers;
private LiveData<GitItem> mUser;
private final GithubUserService githubUserService;
private final AppExecutors appExecutors;
private final Application application;
private static String LOG_TAG = UserRepository.class.getSimpleName();
private RateLimiter<String> repoListRateLimit = new RateLimiter<>(1, TimeUnit.MINUTES);

   public UserRepository(Application application, GithubUserService githubUserService, AppExecutors appExecutors) {
        this.application = application;
        UserRoomDatabase db = UserRoomDatabase.getDatabase(application);
        mUserDao = db.userDao();
        this.githubUserService = githubUserService;
        this.appExecutors = appExecutors;
    }

    public LiveData<GitItem> getUser(int userId) {
        LiveData<GitItem> user = mUserDao.loadUser(userId);
        Log.d(LOG_TAG, "retrieved …
Run Code Online (Sandbox Code Playgroud)

android android-room android-livedata android-viewmodel android-architecture-components

5
推荐指数
1
解决办法
877
查看次数