【问题标题】:Updating data Using WorkManager使用 WorkManager 更新数据
【发布时间】:2020-03-24 22:47:17
【问题描述】:

我正在开发一个从 rest api 获取数据的应用程序,所以基本上我为此实现了 WorkManager,我希望数据每 15 分钟刷新一次,所以我将间隔的最小值设置为 15 分钟,我设置了我的 workmanager 类,在其中我向我的 api 发出请求,并将该类传递给 PeriodicTimeRequest ,现在我不知道在发起请求后我将如何将数据设置到我的 recyclerview

这是我的 WorkManager 类

public class WorkManager extends Worker {

   public static List<Movie> list;

    public WorkManager(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {
        getData();
        return Result.success();
    }


    public void getData() {
        RetrofitBuilder.getData().getTopRatedMovies(Utils.apikey, Utils.language, 1)
                .enqueue(new Callback<Movie>() {
                    @Override
                    public void onResponse(Call<Movie> call, Response<Movie> response) {
                        if (response.isSuccessful()) {
                           list = response.body().getMovies();
                        }
                    }

                    @Override
                    public void onFailure(Call<Movie> call, Throwable t) {
                        Log.d("TODO", "Excep" + t.toString());
                    }
                });

    } 

这是我活动中的 PeriodicTimeRequest

  Constraints constraints = new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build();

        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(WorkManager.class,
                15, TimeUnit.MINUTES)
                .setConstraints(constraints)
                .build();
         androidx.work.WorkManager.getInstance(MainActivity.this).enqueueUniquePeriodicWork("tags",
                 ExistingPeriodicWorkPolicy.KEEP,periodicWorkRequest);

所以我基本上想每 15 分钟从 api 更新一次数据,然后我想获取数据并将其推送到我的 recyclerview ,我是否使用了正确的方法,谢谢你们。

【问题讨论】:

  • 您是否成功设置了WorkerManger?

标签: android


【解决方案1】:

不,你不是。静态字段真的很糟糕。

今天Realm(我认为是 Room)有一些机制可以在查询的基础结果发生变化时自动更新 recyclerViews。所以这将是最简单的方法。

另一种方法是使用LocalBroadcastManager,正如我最近描述的here

编辑:

经过进一步研究,workManager 提供了一个显示为here 的输出机制,并且您的问题已经得到了回答here

【讨论】:

  • 在 realm 或 room 的情况下,你的意思是我应该先存储数据,然后再更新 recyclerview 吗?
  • WorkManager 不是也打算与服务器同步数据吗?我很困惑
  • 在 Realm 的情况下,您只需保留数据,recyclerView 即可反映更改,而无需您做任何事情medium.com/@Zhuinden/…
  • Isn't WorkManager intended to also syncing data with server 是的,你使用 WorkManager 的方式是可以的,但是静态地保持一个列表而不是使用持久层是非常糟糕并且没有意义的。 stackoverflow.com/a/19774331/2754562。如果您不想保留数据,请使用 LocalBroadcastManager
  • 所以我认为与服务相同的方法,例如,每当我们想要更新数据时使用服务或工作管理器,我们应该提供一个持久层,但在我的情况下,我不想持久化数据,所以我将在 LocalBroadcastManager 中传递该数据列表,对吗?>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多