Java 当用户打开“活动”时,我如何才能发出网络请求,但前提是自上次请求已过24小时?

Java 当用户打开“活动”时,我如何才能发出网络请求,但前提是自上次请求已过24小时?,java,android,Java,Android,我有一个活动,它发送一个网络请求,从API获取一些数据,并将其保存在数据库中,但每次用户打开活动时,它都会发送请求,是否有办法仅在上次请求后24小时内发出请求?您可以将上次点击时间存储在共享首选项中,当用户打开该活动时,将获取上次保存的时间并与当前时间进行比较(如果大于24小时),然后点击API,否则不执行任何操作。要创建这样的共享引用类,请执行以下操作:- public class AppPrefrences { private static SharedPrefer

我有一个活动,它发送一个网络请求,从API获取一些数据,并将其保存在数据库中,但每次用户打开活动时,它都会发送请求,是否有办法仅在上次请求后24小时内发出请求?

您可以将上次点击时间存储在共享首选项中,当用户打开该活动时,将获取上次保存的时间并与当前时间进行比较(如果大于24小时),然后点击API,否则不执行任何操作。要创建这样的共享引用类,请执行以下操作:-

public class AppPrefrences {

            private static SharedPreferences mPrefs;
            private static SharedPreferences.Editor mPrefsEditor;

    public static String getLastTime(Context ctx) {
            mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            return mPrefs.getString("lstTime", "");
        }

        public static void setLastTime(Context ctx, String value) {
            mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            mPrefsEditor = mPrefs.edit();
            mPrefsEditor.putString("lastTime", value);
            mPrefsEditor.commit();
        }

public static void clearAllData(Context ctx) {
        mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        mPrefsEditor = mPrefs.edit();
        mPrefsEditor.clear();
        mPrefsEditor.commit();
    }
        } 
要设置时间,请执行以下操作:-

setLastTime(this, "current time");
要获得最后一次:

String lastTime = getLastTime(this);

现在在lastTime中,您获得了上次api命中时间,现在获得当前时间,比较这两个时间并执行代码。

在activity中调用api时,将时间保存到首选项。下次使用当前时间检查上一次。如果当前时间大于上一个api调用时间的24,则调用您的api不需要有一个静态SharedReference,您可以不断地重新初始化它。此外,如果您关心性能并且不冻结UI线程,我们不必使用
.commit
,而是使用
.apply()
。此代码效率非常低。另外,为什么最后一次的类型是
String
而不是
Long
Int
?我只是建议,这完全取决于开发人员将以何种数据格式保存其详细信息。对于您的同类信息,它不会降低您的应用程序性能@Zun只写你非常了解的事情,否则会损害你的技能
commit
更慢。这是事实。查看
SharedReference.Editor
文档:“与提交()不同,提交()会将其首选项同步写入持久性存储,而应用()会立即将其更改提交到内存中的SharedReference,但会启动对磁盘的异步提交,并且不会收到任何失败的通知。”不断地重新初始化是对内存的浪费,可能会不必要地触发垃圾收集器,从而丢弃帧。这是事实。如果你认为这些事实是错误的,那么请教育我