2012-09-25 114 views
0

起初我有很強的Java知識,但是剛剛開始使用Android。應用程序對象的序列化

我的Android應用程序正在下載一些相當複雜的數據(文本,日期,圖像),我將其保存在自定義對象中。數據需要不時更新。但通常下載的數據不會改變。

爲了將數據保存在內存中,我使用了應用程序對象。不幸的是,它看起來應用程序對象實例在應用程序被終止時被銷燬。

因此,我想知道在onPause()期間序列化並保存我的自定義對象(包含在應用程序對象中)是否是一個很好的習慣。很明顯,我會先從onResume()中的文件中讀取,然後再從互聯網上重新加載。這個想法也是爲了啓用離線觀看。

長遠來說,計劃是將代碼下載到後臺服務中的日期。由於在Android中保持應用程序狀態似乎有很多不同的方式,因此我希望確保這是正確的方法。使用這些方法的類保存對象(S)(實現序列化),你需要

回答

1

嘗試:

public synchronized boolean save(String fileName, Object objToSave) 
    { 
     try 
     { 

      // save to file 
      File file = new File(CONTEXT.getDir("filesdir", Context.MODE_PRIVATE) + "/file.file"); 
      if (file.exists()) 
      { 
       file.delete(); 
      } 

      file.getParentFile().mkdirs(); 
      file.createNewFile(); 

      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file)); 
      oos.writeObject(objToSave); 
      oos.close(); 

      return true; 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
      return false; 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
      return false; 
     } 
    } 


public synchronized Object load(String fileName) 
    { 
     try 
     { 

      File file = new File(CONTEXT.getDir("filesdir", Context.MODE_PRIVATE) + "/file.file"); 
      if (!file.exists()) 
      { 
       return null; 
      } 

      ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); 
      savedObj = ois.readObject(); 
      ois.close(); 

      return savedObj; 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
      return null; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

你需要投你加載對象()。 CONTEXT是一個Activity或ApplicationContext來訪問cachedir。 您可以使用Environment.getExternalStorageState()來獲取目錄路徑。不要忘記添加它「/文件名」。

+0

謝謝。它運作良好。但是,使用應用程序對象並對其內容進行序列化是一種很好的做法嗎? –

+0

如果你指的是Android的應用程序對象,這可能不是一個好主意......我可以將你的數據存儲在一個專門的類中並保存/加載它。 – Givi