Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern

mrnarn

Mitglied
Hi,
um wieder den Einstieg in die Android Programmierung zu schaffen, bin ich gerade dabei eine App zu programmieren.
Bei der App muss ich ein Objekt in eine SQLite Datenbank speichern. Im Internet hab ich gelesen, dass dies durch Serialisierung möglich ist. Bei mir funktioniert es jedoch leider noch nicht.

Das Problem tritt in der Methode objektDeserialisieren (Der Aufruf dieser Methode geschieht in "benachrichtigungHinzufuegen") auf. Da läuft irgendetwas schief und es wird der catch-Teil aufgerufen.
Hier mein Code:

Klasse, in der das Objekt serialisiert wird: (Ich hab den Code aus Platzgründen gekürzt)
Java:
public class HinzufuegenActivity extends Activity implements OnClickListener {

Dialog d1;
Benachrichtigung b;
Benachrichtigung b2;
//Unwichtiger Code entfernt

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hinzufuegen);

    //Unwichtiger Code entfernt

}



public void benachrichtigungHinzufuegen() {
    if (rbSchnell.isChecked()) {
    b = new Benachrichtigung(this,"schnell",edTitel.getText().toString());
    if(objektDeserialisieren(objektSerialisieren())) {
    b2.setContext(this); 
        b2.showNotification();
    }
// finish();

    }
    else {
    b = new             Benachrichtigung(this,"erweitert",edTitel.getText().toString(),edErinnerungstext.getText().toString(),rbDauerhaft.isChecked());
    if(objektDeserialisieren(objektSerialisieren())) {
    b2.setContext(this); 
            b2.showNotification();
    }
// finish(); 
}

}


public String objektSerialisieren() {
     String serializedObject = "";
     try {
         ByteArrayOutputStream bo = new ByteArrayOutputStream();
         ObjectOutputStream so = new ObjectOutputStream(bo);
         so.writeObject(b);
         so.flush();
         serializedObject = bo.toString();
     } catch (Exception e) {
         System.out.println(e);
     }

    return serializedObject;

}


public boolean objektDeserialisieren(String serializedObject) {

    try {
         byte b[] = serializedObject.getBytes(); 
         ByteArrayInputStream bi = new ByteArrayInputStream(b);
         ObjectInputStream si = new ObjectInputStream(bi);
         b2 = (Benachrichtigung) si.readObject();
         return true;
     } catch (Exception e) {
         d1 = new Dialog(this,e.toString());
         d1.showDialog();
         return false;
     }


}
}


Hier die Klasse des Objekts, das ich speichern will: (auch gekürzt)

Java:
public class Benachrichtigung implements java.io.Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private transient NotificationOpenHandler openHandler;

    private transient Context con;
    private String typ;
    private String titel;
    private String text;
    private boolean onGoing;
//  private int id;

    public Benachrichtigung(Context pCon, String pTyp, String pTitel, String pText, boolean pOnGoing) {
        con = pCon;
        typ = pTyp;
        titel = pTitel;
        text = pText;
        onGoing = pOnGoing;
    }

    public Benachrichtigung(Context pCon, String pTyp, String pTitel) {
        con = pCon;
        typ = pTyp;
        titel = pTitel;
        text ="";
        onGoing = true;
    }

    public void setContext (Context pCon) {
        con = pCon;
    }

Wenn ich das Programm so ausführe, wird die Exception "java.io.StreamCorruptedException" agezeigt. Im LogCat steht "01-15 18:13:48.408: W/InputEventReceiver(29935): Attempted to finish an input event but the input event receiver has already been disposed."

Hat jemand eine Idee?

mfg
 

dzim

Top Contributor
Bitte Android-spezifische Fragen im entsprechenden Unterforum "Mobile Geräte" stellen:
http://www.java-forum.org/mobile-geraete/
Da das Unterforum "Allgemeine Java-Themen" (also das hier gerade) aktiver ist, können evtl. Fragen in der Flut der anderen untergehen...

Zum Thema: Korrekt ist schon, dass du die Daten eines Objekts (einer Bean/einer Modell-Klasse) in einer (beliebigen - auch Android-Unabhängigen) DB serialisieren kannst. Was du da oben versuchst verwendet aber an keiner Stelle eine SQLite-DB und hat nicht im entferntesten damit etwas zu tun!

Allgemein würde ich dir als erstes Empfehlen, dir ein paar Android-Tutorials anzuschauen, z.B. die von Lars Vogel: Android Development
Generell aber sind auch viele der Tutorials - oder Kurzanleitungen - von Google zu empfehlen: Getting Started | Android Developers - auch wenn einige ein gewisses Grundwissen voraussetzen...

Von Lars Vogel könnte dich speziell der Artikel zu SQLite interessieren:
Android SQLite database and content provider - Tutorial

Aber auch andere Persistence-Themen werden betrachtet:
Android Persistence with preferences and files - Tutorial
(Files, Preferences aber auch kurz noch mal SQLite)

Ach und hier hat ein XDA-Member eine abstraktion von SQLite mal vorgestellt... Vielleicht bringt es ja was...
http://www.xda-developers.com/simplify-sqlite-usage-on-android-with-dbxdroid/
 
Zuletzt bearbeitet:

mrnarn

Mitglied
Bitte Android-spezifische Fragen im entsprechenden Unterforum "Mobile Geräte" stellen:
http://www.java-forum.org/mobile-geraete/
Da das Unterforum "Allgemeine Java-Themen" (also das hier gerade) aktiver ist, können evtl. Fragen in der Flut der anderen untergehen...
Sorry, bin nicht sehr aktiv in dem Forum hier und hab es deshalb übersehen. Kann man das Thema hier vielleicht nächträglich verschieben oder soll ich sogar ein neues Thema im entsprechenden Bereich posten?

Zum Thema: Korrekt ist schon, dass du die Daten eines Objekts (einer Bean/einer Modell-Klasse) in einer (beliebigen - auch Android-Unabhängigen) DB serialisieren kannst. Was du da oben versuchst verwendet aber an keiner Stelle eine SQLite-DB und hat nicht im entferntesten damit etwas zu tun!
Es geht auch erstmal nicht um die Datenbank, sondern um die Serialisierung, bei der der oben genannte Fehler auftritt. Ich hab ja auch extra dazu geschrieben, dass der Quellcode gekürzt ist. An einer anderen Stelle greife ich nämlich auf eine SQLite Datenbank zu. Zur Übersicht und da dies generell schon funktioniert habe ich es weggelassen, damit erstmal der eine Fehler behoben werden kann.

Allgemein würde ich dir als erstes Empfehlen, dir ein paar Android-Tutorials anzuschauen, z.B. die von Lars Vogel: Android Development


Generell aber sind auch viele der Tutorials - oder Kurzanleitungen - von Google zu empfehlen: Getting Started | Android Developers - auch wenn einige ein gewisses Grundwissen voraussetzen...

Von Lars Vogel könnte dich speziell der Artikel zu SQLite interessieren:
Android SQLite database and content provider - Tutorial

Aber auch andere Persistence-Themen werden betrachtet:
Android Persistence with preferences and files - Tutorial
(Files, Preferences aber auch kurz noch mal SQLite)

Ach und hier hat ein XDA-Member eine abstraktion von SQLite mal vorgestellt... Vielleicht bringt es ja was...
http://www.xda-developers.com/simplify-sqlite-usage-on-android-with-dbxdroid/

Ich bin kein absoluter Neuling. Ich hab schon ein paar Apps programmiert und auch Java-Grundkenntnisse.
Generell bezieht sich mein Problem erstmal nicht auf SQLite sondern auf die Serialisierung. Ich hab SQlite allerdings mit in den Titel geschrieben, da ich dazu eventuell später noch Fragen habe.

mfg
 
Zuletzt bearbeitet:

dzim

Top Contributor
Ok. Was mich halt verwirrt hat, ist:
mrnarn hat gesagt.:
Bei der App muss ich ein Objekt in eine SQLite Datenbank speichern. Im Internet hab ich gelesen, dass dies durch Serialisierung möglich ist. Bei mir funktioniert es jedoch leider noch nicht.
Weil ich noch nicht ganz verstehe, was dein Ziel ist. Möchtest du am Ende Java-Objekte in die DB serialisieren und wenn ja: Wieso?

Ich habe selbst Serializable nie verwendet, weil es mir immer seltsam und in heutiger Zeit auch anachronistisch vorkommt.
Die Dev-Seite von Android hat unter Serializable | Android Developers auch noch ein interessantes Zitat:
developer.android.com hat gesagt.:
Recommended Alternatives
JSON is concise, human-readable and efficient. Android includes both a streaming API and a tree API to read and write JSON. Use a binding library like GSON to read and write Java objects directly.
Gesetz dem Fall, du möchtest die Objekte für sich auf der SD-Karte speichern.

Ansonsten halt einen ContentProvider für SQLite schreiben und (wie bei JSON auch) ein Objekt-Datum --> eine Zeile in der DB.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Ein Objekt mehrfach serialisieren Allgemeine Java-Themen 2
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
T Serialisiertes Objekt über Socket nachladen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben