2016-09-27 1 views
-1

Ich versuche, schmutzig Flagge zwischen zwei Tabellen zu synchronisieren. Einem Formular können mehrere Antworten zugeordnet sein. Wenn eine dieser Antworten jemals als schmutzig markiert wird, möchte ich, dass das Formular auch als "dreckig" gekennzeichnet wird. Unten ist, was ich gerade versuche, scheint nicht zu funktionieren. HierSync verschmutzte Flags mit SQLite-Trigger

db.execSQL("CREATE TRIGGER IF NOT EXISTS markFormDirtyIfAnswerDirty AFTER UPDATE ON Answer WHEN isDirty=true " + 
      "BEGIN " + 
      "UPDATE Form SET dirty=true WHERE _id=OLD.formId; " + 
      "END "); 

ist der Fehler, den ich bekommen:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myappmobile.test/com.myapp.myappmobile.activities.DashboardActivity_}: java.lang.IllegalStateException: getDatabase called recursively 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                       at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5343) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
                      Caused by: java.lang.IllegalStateException: getDatabase called recursively 
+0

Vielen Dank, dass Sie die Fehlermeldung geheim halten. –

+0

Oop tut mir leid. Ich habe es der ursprünglichen Frage hinzugefügt –

Antwort

0

ich die Lösung gefunden. Es stellte sich heraus, dass SQLite nicht true und false unterstützt, stattdessen müssen Sie 1 und 0 verwenden. Außerdem musste ich die NEW-Referenz verwenden, um das dirty-Flag zu überprüfen. Die richtige Antwort sieht wie folgt aus.

 db.execSQL("CREATE TRIGGER IF NOT EXISTS markFormDirtyIfAnswerDirty AFTER UPDATE ON Answer WHEN NEW.isDirty=1 " + 
      "BEGIN " + 
      "UPDATE Form SET dirty=1 WHERE _id=OLD.formId; " + 
      "END ");