如何在sharedPreferences中刷新/更新Serialize Java Object

时间:2016-05-15 21:47:10

标签: android sharedpreferences

使用下面的代码

存储可序列化的java对象
if(sharedpreferences.getString(ComplexObjectXMl,"")!=null) {

                Serializer serializer = new Persister();
                MyObject example = null;
                try {
                    example = serializer.read(MyObject .class, sharedpreferences.getString(ComplexObjectXMl,""));
                } catch (Exception e) {
                    e.printStackTrace();
                }

                Intent i1 = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(i1);
            }
                new MyAsyncTask().execute();

在MyAsyncTask中,我将XmlDataOverHttp存储在sharedPreferences中。如果我愿意,每次都会更新

1 个答案:

答案 0 :(得分:1)

你可以比较那些对象的字节数组。一个来自共享偏好,另一个来自最新。

  byte[] array = new Gson().toJson(latestObject).getBytes(); //your lattest byte array
    byte[] secondArray = new Gson().toJson(objectConvertedFromSharedPreferenceOLD).getBytes();
    if (Arrays.equals(array, secondArray))

        System.out.println("They are same");
else
 System.out.println("Nope...");

正如您所说,您可以使用服务或共享首选项来检查oncreateView()中的每小时更新,但它只会在用户打开您的应用程序时发生(在小时之间它将调用api列表项)

    SharedPreferences mSettings = PreferenceManager.getDefaultSharedPreferences
                (Dashboard.this);
        long lastUpdateTime = mSettings.getLong("lastUpdateTime", 0);
        /* Should Activity Check for Updates Now? */
        if ((lastUpdateTime + (3600000)) < System.currentTimeMillis()) {

        /* Save current timestamp for next Check*/
            SharedPreferences.Editor editor = mSettings.edit();
            lastUpdateTime = System.currentTimeMillis();
            editor.putLong("lastUpdateTime", lastUpdateTime);
            editor.commit();

        /* Start Update for listview your URL to fetch data and then you can check and compare object 
also you can use swipeRefreshLayout so user can also refresh data*/
            //asyncRequestTime.execute(URL);
        }