# SQLLite error code 0x13: constraint failed



## Goldfish (30. Jul 2014)

Hi, ich hab nen Fehler, wo ich weiß, woran es liegt, aber nicht weiß, wie ich das Problem löse. Da wäre es super, wenn mir jemand raushelfen könnte.

Ich habe Objekte, die ich für sehr kurze Zeit, bis sie verarbeitet sind, in der Datenbank speichere. Das Objekt knall ich einfach als Blob rein, da ich davon ausgehen kann, dass sich niemals besonders viele dieser Objekte anstauen werden. 10 Objekte der Art wären schon viel. Innerhalb der entsprechenden Klasse des Objektes, befindet sich ein weiteres Objekt. Eine einfache Klasse, die das Interface Serializable implementiert.
so siehts aus:

*Die Klasse, die in erster Linie als BLOB in die Datenbank soll*

```
class NetworkRequest implements Serializable{

    public static final long serialVersionUID = 2725129790L;
    ...
    private transient NetworkResponseHandler networkResponseHandler;
    ...
}
```

Wenn ich das Objekt NetworkResponseHandler aus der Klasse entferne, funktioniert alles wunderbar. Die entsprechende Klasse ist wie folgt aufgebaut;

*Die Klasse ist komplett gepostet, es fehlen keine Zeilen.*

```
public abstract class NetworkResponseHandler implements Serializable{

    // the UID is the hash value generated by the name of this class
    public static final long serialVersionUID = 2815614597L;

    protected static enum MessageKind {
        POSITIVE, NEGATIVE, FAIL
    }

    public abstract void onServerResponse(MessageKind messageKind, HttpResult result);
}
```

Hat jemand ne Ahnung, wieso ich einen constraint fails-Fehler bekomme, wenn ich versuche einen insert zu machen?

EDIT:

Ahja, das Objekt, das in diesem speziellen Fall gespeichert ist, ist folgendes:


```
new NetworkResponseHandler() {
             @Override
             public void onServerResponse(MessageKind messageKind, HttpResult result) {
                 if (messageKind == MessageKind.POSITIVE) {
                     startActivity(startActivityOnSuccess);
                 }
             }
         });
```


----------



## dzim (31. Jul 2014)

Vielleicht liegt es an der Enum? Sonst würde mir da spontan auch nichts einfallen...


----------



## Goldfish (31. Jul 2014)

so, wieder zuhause und konnte es auch direkt mal testen. Es liegt leider nicht am enum... Der Fehler bleibt bestehen... habs auch nochmal getestet, dass Objekt rauszuwerfen. Dann gehts... Echt frustrierend solche Nummern...


----------



## dzim (31. Jul 2014)

Sind alle klassen innerhalb des NetworkResponseHandler auch Serializable? Also alles was du als Parameter übergibst und mit denen du vielleicht innerhalb der jeweiligen Implementierung arbeitest? Wenn da nur eins nicht Serializable ist, wirds vielleicht schon nicht gehen (sorry, dass ich da nicht genauer sein kann, aber ich habe Serializable immer vermieden :-D )


----------



## Goldfish (31. Jul 2014)

Die Idee kam mir auch schon. Und genauer kann man an der Stelle wohl auch nicht werden ^^
Aber wie ich schon sagte, ich hab oben den KOMPLETTEN Code vom NetworkResponseHandler gepostet. Mehr ist da nicht drinnen. Auch das Objekt, das versucht wird zu speicher. Bei dem kam ich gerade auf die Idee, dass es vielleicht am Intent liegen mag, der in der Methode verwendet wird - was ich für sehr unwahrscheinlich hielt -. Also hab ich die Zeile


```
startActivity(startActivityOnSuccess);
```

auskommentiert und der Fehler kommt noch immer... ich versuchs jetzt mit einem Workaround, da ich momentan nicht die Zeit habe, mich so lange mit sowas rumzuschlagen XD es ist einfach so unheimlich viel zu tun ^^°
Beim Workaround, versuch ich das Objekt jetzt mal zu serialisieren, und mit der Objekt-Id und dem zugehörigen Elementnamen in einer Datei zwischenzuspeichern. Da die Liste wie schon erwähnt nie besonders groß werden sollte, erwarte ich da mal keine großartigen performance-Schwierigkeiten^^° aber schön ist die Lösung trotzdem nicht...
Aber auch erstmal abwarten, obs funktioniert. Sitz gerade noch dran ^^


----------



## Goldfish (31. Jul 2014)

okay, es funktioniert nicht, aber jetzt zeigt er wenigstens sein wahres Gesicht und sagt mir auch warum.


```
07-31 18:16:58.791: WARN/System.err(3999): java.io.NotSerializableException: de.uni_bremen.activities.LoginActivity
```

der Spinner will mit dem NetworkResponseHandler die Activity serialisieren.... Was soll das denn?


----------



## Goldfish (31. Jul 2014)

wird noch besser... wenn ich ne Ausgabe hole von meinem NetworkResponsHandler bekomme ich die Ausgabe...

```
de.uni_bremen.activities.LoginActivity$1
```

Jemand ne Ahnung, wie ich das umgehen kann? Wird sicherlich damit zusammenhängen, dass ich den NetworkRequestHandler in dieser Activity erzeuge. Aber ich hatte jetzt auch nicht vor, diverse voraus Implementierungen von diesem Handler zu haben...


----------



## Goldfish (31. Jul 2014)

so, da ich jetzt ne neue Verhaltensweise von Java gelernt habe, ist mir klar geworden, dass das was ich versucht habe unmöglich ist. Entsprechend musste ich mir ne ganz andere Lösung einfallen lassen, mit der ich nun zurecht komme. Entsprechend ist das hier erledigt.


----------

