ClassNotFoundException bei Deserialisierung

  • Antworten:3
Thorsten Kalweit
  • Forum-Beiträge: 1

06.05.2015, 12:30:29 via Website

Hallo zusammen,

ich habe eine kleine App geschrieben, die aus einer Email ein serisalisiertes Objekt einliest bzw. einlesen soll und die darin gespeicherten Daten zur Anzeige bringen soll.

In Android Studio habe ich im gleichem Paket wie die MainActivity.java meine Klasse "Objekt" erstellt. Diese Klasse hat die gleiche Signatur und die gleiche ID wie die Klasse, die das sterilisierte Objekt erstellt.
Alles lässt sich super kompilieren und die App auch starten. Bis jetzt noch ohne Fehler. Sobald ich die Datei einlese und die Methode .readObject(); aufrufe , wird mir eine "ClassNotFoundException: Objekt" geworfen. Code siehe unten...

Könnt Ihr mir helfen? Hängt es mit Gradle zusammen? Und wenn ja, was muss ich machen? (lightbulb)
Die Deserialisierung funktioniert, sobald ich in Eclipse etc eine Testklasse schreibe, die genauso aussieht (nur halt nicht unter Android).

Hier der Code:
Das Objekt o wird bereits als Instanzvariable deklariert (o=null). Die Methode importData liest den Dateianhang aus der Email, wenn in der Mail beim Anhang auf Anzeigen gedrückt wird, ein.
Java Code:

private void importData(Uri data) {
        final String scheme = data.getScheme();

        if (ContentResolver.SCHEME_CONTENT.equals(scheme)) try {

            ContentResolver cr = getContentResolver();
            InputStream is = cr.openInputStream(data);
            ObjectInputStream objectInput = new ObjectInputStream(is);
            o = (Objekt) objectInput.readObject();
            txtHello.setText(o.getEigenschaft());


       /* } catch (ClassNotFoundException exception) {
            System.err.println("Fehler: " + exception.toString());*/
        } catch (Exception e){
            e.printStackTrace();
        }
    }

Vielen Dank und viele Grüße
Thorsten

Antworten
Sven R.
  • Forum-Beiträge: 1.904

07.05.2015, 07:13:08 via App

Wird das Objekt aus dem InputStream eine "Objekt" mit k oder ein "Object" mit c sein?

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Ju Ku
  • Forum-Beiträge: 72

07.05.2015, 13:57:31 via Website

Das hat nichts mit Gradle zu tun, Gradle ist lediglich ein Build Tool, welches deinen Build oder eine .apk erzeugt.
Wird das Object vorher auch mit einer App erstellt?
Ich würde dir eher empfehlen mit JSON zu arbeiten, da JSON als String übertragen werden kann, weniger Speicher benötigt und platform independent ist, Google bietet dafür sehr gute libraries, mit denen du arbeiten kannst.

Es gibt auch noch org.json als Package, das sollte standardmäßig sogar bei Android dabei sein.

JSONObject json = new JSONObject();
json.put("key", "value");
JSONArray array = new JSONArray();
array.add("list item");
json.put("array1", array.toString());

String jsonStr = json.toString();

JSONObject newJSONObj = new JSONObject(jsonStr);
String value = newJSONObject.get("key");

Falls du die Daten serializieren willst, solltest du darauf achten, dass du beim Serialisieren die Klasse mit Package angibst, also z.B. com.example.ObjectName, da sonst Android die Klasse im selben Package wie die Activity vermutet und somit nicht findet.

Antworten
Sven R.
  • Forum-Beiträge: 1.904

07.05.2015, 14:19:06 via App

Ja, ich hätte auch noch erwähnen sollen, dass ich persönlich für solche Sachen JSON verwende.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten