安卓系统改造:我想每天在特定时间更新或刷新数据,或者每天更新一次,成功检索数据,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();
}
});
}

这两种方法我用来临时首先我用房间DB bt作为临时。我尝试共享偏好的任务现在我想通过每天更新一次数据或在当天的特定时间更新来实现刷新或更新数据任务

您可以将WorkManager用于这类内容。

在这里你可以找到更多关于它的信息。

请注意,在小米等一些设备上,如果应用程序处于后台(未运行(,您的任务可能永远无法触发。但WorkManager是目前最可靠的。它可能会延迟完成任务,但至少你的任务完成了(仍然在谈论自定义操作系统设备(。在其他设备(库存android(中,您可以同时使用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();
}
}

最新更新