Comment mettre en cache / sauvegarder un objet de classe personnalisé dans Android?

Je veux enregistrer ArrayList<CustomClass> -objeter quelque part dans le stockage Android pour récupérer rapidement et afficher les données.

Est-ce possible ou non? Dans l'affirmative, quelle technique convient-elle, SQLite ou stockage externe?

  • Impossible d'exécuter le projet importé
  • Android WebView Zoom limité
  • Contrainte sur performFiltering renvoie null sur le premier caractère
  • Partage de NavigationView avec toutes les activités?
  • La barre de titre de l'application Android ne s'affiche pas lors du test de l'application?
  • Animation parallèle dans Imageview
  • 3 Solutions collect form web for “Comment mettre en cache / sauvegarder un objet de classe personnalisé dans Android?”

    Exemple.

     public class MyClass implements Serializable { private static final long serialVersionUID = 1L; public String title; public String startTime; public String endTime; public String day; public boolean classEnabled; public MyClass(String title, String startTime, boolean enable) { this.title = title; this.startTime = startTime; this.classEnabled = enable; } public boolean saveObject(MyClass obj) { final File suspend_f=new File(SerializationTest.cacheDir, "test"); FileOutputStream fos = null; ObjectOutputStream oos = null; boolean keep = true; try { fos = new FileOutputStream(suspend_f); oos = new ObjectOutputStream(fos); oos.writeObject(obj); } catch (Exception e) { keep = false; } finally { try { if (oos != null) oos.close(); if (fos != null) fos.close(); if (keep == false) suspend_f.delete(); } catch (Exception e) { /* do nothing */ } } return keep; } public MyClass getObject(Context c) { final File suspend_f=new File(SerializationTest.cacheDir, "test"); MyClass simpleClass= null; FileInputStream fis = null; ObjectInputStream is = null; try { fis = new FileInputStream(suspend_f); is = new ObjectInputStream(fis); simpleClass = (MyClass) is.readObject(); } catch(Exception e) { String val= e.getMessage(); } finally { try { if (fis != null) fis.close(); if (is != null) is.close(); } catch (Exception e) { } } return simpleClass; } 

    Et appel d'une activité

     if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"MyCustomObject"); else cacheDir= getCacheDir(); if(!cacheDir.exists()) cacheDir.mkdirs(); MyClass m = new MyClass("umer", "asif", true); boolean result = m.saveObject(m); if(result) Toast.makeText(this, "Saved object", Toast.LENGTH_LONG).show(); else Toast.makeText(this, "Error saving object", Toast.LENGTH_LONG).show(); MyClass m = new MyClass(); MyClass c = m.getObject(this); if(c!= null) Toast.makeText(this, "Retrieved object", Toast.LENGTH_LONG).show(); else Toast.makeText(this, "Error retrieving object", Toast.LENGTH_LONG).show(); 

    N'oubliez pas d'utiliser les autorisations write_external_storage dans le fichier manifeste.

    Ce problème n'est pas vraiment spécifique à Android. Je veux dire, si vous savez comment sérialiser vos données via java.io.Serializable ou vous avez un format de persistance personnalisé, il suffit de savoir où l'enregistrer.

    Vous pouvez saisir un fichier sur l'appareil local via

     FileOutputStream stream = null; try{ stream = mContext.openFileOutput("name.data", Context.MODE_PRIVATE); DataOutputStream dout = new DataOutputStream(stream); dout.writeObject(myArrayList); dout.flush(); stream.getFD().sync(); catch(IOException e) { //Do something intelligent } finally { stream.close(); } 

    Vous devrez utiliser openFileInput () plus tard pour lire les données.

    Ou vous pouvez prendre le stockage externe. Ceci est similaire, mais vous devez garantir qu'il existe même. Tout comme le stockage externe est connecté et peut même être écrit. Étant donné que vous écrivez une structure de données ici, et habituellement, le stockage externe est lisible dans le monde. Je ne pense pas que ce soit une bonne idée à vos fins prévues (juste de ce que vous avez mis jusqu'ici).

    Si vos données sont structurées et vont être interrogées à plusieurs reprises et qu'il pourrait être assez important pour toujours charger, alors envisagez d'utiliser les outils sql lite qui font partie du système d'exploitation. Cependant, je suppose que vous n'avez pas besoin de cela, non seulement comme une simple liste, c'est qu'une structure linéaire que vous pourriez probablement rechercher dans un fichier (en supposant qu'il soit inférieur à 1 Mo de données 🙂

    Ce problème peut être résolu par la classe singleton dans laquelle vous pouvez définir / obtenir n'importe quel objet, par exemple, arrayList à tout moment. Si vous utilisez Android Service, cette solution n'est pas appropriée. Peut-être que la solution à votre problème peut être trouvée ici .

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.