如何在android中将数据存储在共享偏好中23小时?

时间:2016-03-14 05:41:49

标签: android sharedpreferences

说明:            在我的应用程序中,令牌将在每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小时之前使用来自共享偏好的令牌。 请帮我解决这个问题。

2 个答案:

答案 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

    }