2012-09-25 1 views
0

Au début, j'ai de solides connaissances Java, mais je viens de commencer avec Android.Sérialisation de l'objet d'application

Mon application Android télécharge des données assez complexes (textes, dates, images) que je sauvegarde dans un objet personnalisé. Les données doivent être actualisées de temps en temps. Cependant, généralement, les données téléchargées ne changeront pas.

Pour conserver les données en mémoire, j'utilise l'objet Application. Malheureusement, il semble que l'instance de l'objet application soit détruite lorsque l'application est supprimée.

Par conséquent, je me demandais s'il serait bon de sérialiser et d'enregistrer mon objet personnalisé (qui est contenu dans l'objet application) dans le stockage interne pendant onPause(). Évidemment, je voudrais d'abord lire le fichier dans onResume() avant de recharger à partir d'Internet. L'idée est également d'activer la visualisation hors ligne. À plus long terme, il est prévu de déplacer le code en téléchargeant la date dans un service d'arrière-plan. Comme il semble y avoir plusieurs façons de conserver l'état de l'application dans Android, je voudrais être sûr que c'est la bonne façon de procéder.

Répondre

1

Essayez d'utiliser les méthodes de classe pour sauver l'objet (s) (outils sérialisent) dont vous avez besoin:

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; 
     } 
    } 

Vous aurez besoin de jeter l'objet que vous chargez(). CONTEXT est un Activity ou ApplicationContext pour accéder au cacheedir. Vous pouvez utiliser Environment.getExternalStorageState() à la place pour obtenir un chemin de répertoire. N'oublie pas de l'ajouter "/ filename".

+0

Merci. Ça marche bien. Cependant, est-ce une bonne pratique d'utiliser l'objet application et de sérialiser son contenu? –

+0

Si vous faites référence à l'objet Application d'Android, ce n'est probablement pas une bonne idée ... Je vous pouvez, stocker vos données sur une classe dédiée et sauvegarder/charger. – Givi