2016-05-15 30 views
0

爲了存儲serilaizable Java對象/更新序列化Java對象I M使用以下代碼如何刷新在sharedPreferences

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 I M存儲在sharedPreferences的XmlDataOverHttp。它會每次更新如果我喜歡這樣做

回答

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); 
     } 
+0

它的對象具有關於應用程序的所有信息。我不想每次都從服務器獲取該對象,只想在服務器上更改時才加載。這就是爲什麼把它存儲在共享首選項 –

+0

如果我能夠刷新這個對象每小時,這將有助於很多,但不是每次。根據我需要每次比較對象的方法 –

+0

它對你有幫助嗎?或者您想使用小時內運行的服務來檢查更新的數據。 –