- Forum-Beiträge: 464
14.01.2015, 17:19:55 via Website
14.01.2015 17:19:55 via Website
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.
Hier mein Code:
Klasse, in der das Objekt serialisiert wird: (Ich hab den Code aus Platzgründen gekürzt)
//import.....
public class HinzufuegenActivity extends Activity implements OnClickListener {
Dialog d1;
Benachrichtigung b;
Benachrichtigung b2;
@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.showNotification();
}
// finish();
}
else {
b = new Benachrichtigung(this,"erweitert",edTitel.getText().toString(),edErinnerungstext.getText().toString(),rbDauerhaft.isChecked());
if(objektDeserialisieren(objektSerialisieren())) {
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)
import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
public class Benachrichtigung {
private 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;
}
}
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. Die Exception e beinhaltet "java.io.EOFException". Ob die Serialisierung funktioniert und nur die Deserialisierung nicht, kann ich nicht sagen. Wenn ich aber den zurückgelieferten String in einem AlertDialog zeige, ist der Dialog leer. Ist das normal?
Hat jemand eine Idee, warum die Deserialisierung nicht funktioniert?
— geändert am 14.01.2015, 17:28:07
Du hast zum Apfel gegriffen? Gott möge dir verzeihen.