Android改造:我想每天在特定时间或每天更新或刷新一次数据,成功检索到的数据Nd也在本地脱机工作

问题描述

我想每天更新这些数据或刷新数据,但是可以在一天中的特定时间或每天一次,

我该如何实现?

我应该遵循以下哪种方法

碎片活动

@Override
public void onViewCreated(View view,Bundle savedInstanceState) {
    super.onViewCreated(view,savedInstanceState);

    cm = (ConnectivityManager) getActivity()
            .getApplicationContext()
            .getSystemService(
                    Context.CONNECTIVITY_SERVICE
            );

    activeNetwork = cm.getActiveNetworkInfo();

    apiCallInterface = ApiService.createService(ApiCallInterface.class);

    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());

    datumList = new ArrayList<>();
    recyclerView = view.findViewById(R.id.retroRecyclerView);
    recyclerView.setLayoutManager(new linearlayoutmanager(getActivity()));

    fetchFromDb();        
}

private void fetchFromDb() {
    Gson gson = new Gson();
    String array = sharedPreferences.getString("category","");
    Type type = new Typetoken<List<Datum>>() {
    }.getType();
    datumList = gson.fromJson(array,type);
    if (datumList != null) {
        retrofitAdapter = new RetrofitAdapter(getContext(),datumList);
        recyclerView.setAdapter(retrofitAdapter);
    } else {
        if (activeNetwork != null
                && activeNetwork.isConnectedOrConnecting()) {
            fetchFromServer();
        } else {
            Toast.makeText(getActivity(),"Internet not available",Toast.LENGTH_SHORT).show();
        }
    }
}

    private void fetchFromServer() {
    Call<MenuResponse> call = apiCallInterface
            .getResponseData(data);

    call.enqueue(new Callback<MenuResponse>() {
        @Override
        public void onResponse(Call<MenuResponse> call,Response<MenuResponse> response) {
            datumList = (ArrayList<Datum>) response.body().getData();
            Gson gson = new Gson();
            editor = sharedPreferences.edit();
            editor.putString("category",gson.toJson(datumList));
            editor.apply();
            retrofitAdapter = new RetrofitAdapter(getContext(),datumList);
            recyclerView.setAdapter(retrofitAdapter);
        }

        @Override
        public void onFailure(Call<MenuResponse> call,Throwable t) {
            Log.d(TAG,"onFailure something went wrong" + t.getLocalizedMessage());
            Toast.makeText(getContext(),"Something went wrong!",Toast.LENGTH_SHORT).show();
        }
    });
}

我曾经临时使用的这两种方法是将Room DB bt用于临时的。我现在尝试共享首选项的任务我想通过每天一次或在一天中的特定时间更新数据来实现刷新或更新数据的任务

解决方法

您可以使用WorkManager进行此类操作。

Here,您可以找到有关它的更多信息。

请注意,在小米等设备上,如果应用程序在后台(未运行),则您的任务可能永远无法触发。 但是WorkManager是目前最可靠的。它可能会延迟执行任务,但是至少您的任务完成了(仍然谈论自定义OS设备)。 在其他设备(安卓系统)中,您可以同时使用WorkManager和AlarmManager。

,

这很好用!

public void runOnceADay() {
    Calendar calendar = Calendar.getInstance();

    int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
    sharedPreferences = getActivity().getSharedPreferences("PREFS",0);

    int lastDay = sharedPreferences.getInt("day",0);

    if (lastDay != currentDay) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("day",currentDay);
        editor.commit();
        //perform task ...
        Log.d("day","updated!");
        fetchFromServer();

    } else {
        Log.d("day","task will be performed tomorrow!");
        fetchFromDb();
    }

}