说明: 在我的应用程序中,令牌将在每24小时后更改。因此,我想在共享偏好中存储23小时的旧数据确定我做到了。现在,如果超过23个小时,我的新身份验证令牌将替换共享首选项中的新数据。这意味着我的令牌可以在接下来的23小时内使用。
如何检查我的第一个身份验证时间过后的23个小时?
以下是获取令牌并保存到共享偏好
的代码 private void Authentication_App_Service(String responseStr) {
int hours=0;
int minutes=0;
try {
Calendar c = Calendar.getInstance();
hours = c.get(Calendar.HOUR_OF_DAY);
Log.e("HOUR OF DAY",""+hours);
minutes = c.get(Calendar.MINUTE);
}
catch (Exception e){
e.printStackTrace();
}
try {
JSONObject jobj_res = new JSONObject(responseStr);
String status = jobj_res.getString("status");
String status_code = jobj_res.getString("status_code");
statusCode = Integer.parseInt(status_code);
if (status.equals("True") || status.equals("true")) {
JSONObject a_res = jobj_res.getJSONObject("auth");
main_public_access_token = a_res.getString("access_token");
SharedPreferences sharedTimer=this.getSharedPreferences("SaveTime",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedTimer.edit();
editor.putString("accessToken", main_public_access_token);
editor.putInt("authentication_time", hours);
editor.commit();
} else {
dialog_popup();
}
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("checking value >> ", ""+ main_public_access_token);
if(main_public_access_token.equals("")){
dialog_popup();
} else {
Intent i = new Intent(getBaseContext(),
MainActivity.class);
i.putExtra(key_access_token, main_public_access_token);
startActivity(i);
finish();
}
}
上述方法每23小时运行一次。在23小时之前,此方法不会再次调用。
我在23小时之前使用来自共享偏好的令牌。 请帮我解决这个问题。
答案 0 :(得分:3)
使用AlarmManager进行此操作。每隔23小时重复一次。 使用以下代码
//Create a new PendingIntent and add it to the AlarmManager
Intent intent = new Intent(this, RingAlarm.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
12345, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am =
(AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
23 * 60 * 60 * 1000,pendingIntent);
以上编写的代码会在每23个小时后触发一次意图。如果您需要更多解释,请告诉我。如果有帮助,请注意。
答案 1 :(得分:0)
要在一段时间后重复相同的任务,请使用简单的& amp;排序方法
private TimerTask doAsynchronousTask;
public void callAsynchronousTask() {
//final Handler handler = new Handler();
Timer timer = new Timer();
doAsynchronousTask = new TimerTask() {
public void run() {
try {
// Write Your code here
} catch (Exception e) {
e.printStackTrace();
}
}
};
timer.schedule(doAsynchronousTask, 0, (23*60*60*1000)); //execute in every 23 Hrs
}