1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Daten speichern und Zugriff

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von schmju5n, 01.03.2011.

  1. schmju5n, 01.03.2011 #1
    schmju5n

    schmju5n Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    16.02.2011
    Hallo,

    ich habe in meiner App ziemlich viele Objekte welche ich immer wieder benötige... Wenn ich diese immer mit putExtras an die nächste Activity übergebe dauert das einfach zu lange...

    Nun wollte ich fragen ob es eine Möglichkeit gibt die Objekte irgendwo zu speichern und dann nur zum Beispiel ne ID zum jeweiligen Objekt an die nächste Activity zu übergeben?

    Wenn ich die Daten in ein txt.File streame ist es auch blöd da die ja dann offen liegen oder?

    Wäre für einen Tip wirklich dankbar...

    Viele Grüße
     
  2. Zonnex, 01.03.2011 #2
    Zonnex

    Zonnex Fortgeschrittenes Mitglied

    Beiträge:
    431
    Erhaltene Danke:
    49
    Registriert seit:
    12.09.2009
    Du kannst eine application class definieren.. in dieser kannst du variablen beim start initialisieren und in jeder Methode abrufen:


    public class MYAPP extends Application {
    String xy = new String();
    }

    in den Klassen:
    MYAPP app = ((MYAPP)getApplicationContext());

    und dann einfach app.xy zum aufrufen des Strings.

    MfG ;)

    Edit: die application class muss in der manifest datei angegeben werden!
     
    schmju5n bedankt sich.
  3. schmju5n, 01.03.2011 #3
    schmju5n

    schmju5n Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    16.02.2011
    Hört sich sehr interessant an!

    Ich überlege gerade ob es nicht mit Serialisieren der Objekte und abspeichern einfacher wäre... Da ja so dann auch sämmtliche Methoden gleich wieder verfügbar wären...
     
  4. ko5tik, 01.03.2011 #4
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Alternative wäre diese im JSON-Format in einen privaten Datei zu speichern.
    Ich kann meine Library empfehlen:

    https://github.com/ko5tik/jsonserializer/
    ( nutze ich um die Highscores zu managen , demnächst kommt ein neues release
    die mit dem Pull-Parser funktioniert - branch gson)
     
    schmju5n bedankt sich.
  5. schmju5n, 03.03.2011 #5
    schmju5n

    schmju5n Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    16.02.2011
    Habe das Ganze nun erstmal so gelöst, dass ich die objekte auf der SD Karte speichere mit

    ObjectOutputStream oos;
    oos = new ObjectOutputStream(new FileOutputStream(
    ("/sdcard/daten") ));

    Nun hab ich mal gelesen, dass SD Karten ja verschleißen und jeder Schreibzugriff diesen Prozess bescheunigen...

    Weis jemand wie ich Daten auf dem internen Telefonspeicher legen kann?? Macht das dann mehr Sinn?

    Oder ist die Sache mit dem JSON-Format doch einfacher und besser? Habe leider noch nie damit gearbeitet... Bräuchte da vielleicht zum Einstieg erstmal bisschen Übung und Beispielcode...

    Schöne Grüße
     
  6. Redh3ad, 03.03.2011 #6
    Redh3ad

    Redh3ad Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    50
    Registriert seit:
    01.04.2010
    Phone:
    Motorola Milestone
    Nein, intern ist auch Flashspeicher.
    Es stimmt, dass eine Speicherzelle nur eine bestimmte Anzahl an Schreibvorgängen mitmacht, aber dank Techniken wie Wear-leveling kann man das vernachlässigen, man kommt trotzdem auf einige Jahre Lebenszeit (wenn das Ding nicht gerade randvoll ist und deshalb immer wieder in den gleichen Bereich geschrieben werden muss).
     
    schmju5n bedankt sich.
  7. schmju5n, 14.03.2011 #7
    schmju5n

    schmju5n Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    16.02.2011

    Kann ich in MYAPP, dann auch auch Objekte speichern??? Wie und wo muss ich die Klasse im Manifest hinzufügen, klappt bei mir noch nicht...
     
  8. ko5tik, 14.03.2011 #8
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Ich würde von dieser Art der Serialisierung absehen - wenn der Klasse geändert wird, werden die gespeicherte Daten nicht mehr lesbar.
    (Problem mit Updates).

    Mach lieber XML oder JSON daraus

    So nach etwa 1000000 Schreibvorgängen - also solange lebt kein Telefon ;)

    Weis jemand wie ich Daten auf dem internen Telefonspeicher legen kann?? Macht das dann mehr Sinn?

    Schau mal bei meinen Projekt in die Unit-Testss ein - dort sind eigentlich Beispiele drin

    Laden ( storage ist eine Liste):
    Code:
    
                Reader reader = new BufferedReader(new InputStreamReader(context.openFileInput(fileName)));
                JsonReader source = new JsonReader(reader);
                source.setLenient(true);
    
    
                // clear storage
                storage.clear();
                // and load from reader
                storage.addAll(JSONUnmarshaller.unmarshallArray(source, clazz));
    
                reader.close();
    
    Speichern einer LIste:

    Code:
            OutputStream fos = context.openFileOutput(fileName, 0);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos);
            JsonWriter writer = new JsonWriter(outputStreamWriter);
            JSONMarshaller.marshallArray(writer, array.toArray());
            writer.flush();
            writer.close();       
            fos.close();
    
     
    schmju5n bedankt sich.
  9. schmju5n, 14.03.2011 #9
    schmju5n

    schmju5n Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    16.02.2011
    Also, es klappt bereits mit der Art, ich muss halt wenn ich meine Objekte ändere diese immer wieder überspeichern... Dann kann ich die wenn ich sie wieder benötige erneut laden und so weiter... Leider ist diese Vorgehensweise sehr zeitaufwendig....

    wie kann ich in dein Projekt einsehen? Und wie schaut es mit der Geschwindikeit bei JSON aus??

    Gibt es ne Möglichkeit, die Objekte in einer Klasse "global" zu definieren, so dass Unterklassen darauf zu greifen können.

    Ich bekomme leider immer nen Nullpointer, wenn ich in der Unterklasse auf ein Objekt der Oberklasse zugreifen will... Kann es sein, dass es der GC wegräumt? Oder muss ich die Objekte speziell deklarieren (final??) ??
     
  10. ko5tik, 14.03.2011 #10
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Indem du vorherigen Thread aufmerksam durchliest, und diesen Link findest:

    https://github.com/ko5tik/jsonserializer/

    Wenn du einen NullPointer hast, dan poste mal den Stacktrace & Deine Objekte
    ( angestellte Hellseher sind im Urlaub ;) )

    Da dies ein Open-Source Projekt ist, kanns du deine Vorschäge machen, Repository
    klonen, patches pushen usw ;)
     
  11. Mugendon, 18.03.2011 #11
    Mugendon

    Mugendon Android-Experte

    Beiträge:
    524
    Erhaltene Danke:
    126
    Registriert seit:
    27.02.2011
    Phone:
    Nexus 6
    Tuts dafür nicht die serialVersionUID? Ich habe damit jedenfalls keine Probleme, wenn sich kleinere Dinge an der Klasse ändern.
     
  12. ko5tik, 18.03.2011 #12
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
  13. Mugendon, 18.03.2011 #13
    Mugendon

    Mugendon Android-Experte

    Beiträge:
    524
    Erhaltene Danke:
    126
    Registriert seit:
    27.02.2011
    Phone:
    Nexus 6
  14. ko5tik, 18.03.2011 #14
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Der kommt aus dem Google GSON ( es gibt da einen halboffizuellen Download, nut mit den Streaming-Klassen - nur 14KB schwer
    ( notwendige Abhängngkeiten sind in dem Build-Deskriptor aufgeführt - sieh pom.xml )
     

Diese Seite empfehlen