興味深い問題があります。私はAndroidでAsyncTask内で実行しているSQLiteのアップデートを持っています(DBコールを行う前にリモート呼び出しを行う必要があるため)。このコードは、アプリケーションがバックグラウンドにプッシュされない限り(例えば、「ホーム」ボタンを使用して)、魅力のように機能します。タスクはバックグラウンドで正常に動作し続け、DB呼び出しが行われ、1行が変更されたことを返しますが、実際にはDBにデータを渡すことはありません。エラーや例外はありません。見知らぬ人でも、ログはすべて正常に動作していることを示します。例外はありません。 また、バックグラウンドにプッシュしないと、これはうまく動作します。AndroidのSQLiteアップデートがAsyncTaskのバックグラウンドで動作しない
コール:(それはAndroidのSQLiteのコードのボンネットの下に起こっている場合を除く)
result = (sqlDB.update("FormInstance", values, "InstanceId=?", new String[] { String.valueOf(form.getSubmissionId()) }) > 0);
はまた、この呼び出しに関係するトランザクションがありません。
なぜこれが当てはまるのでしょうか? DB接続やSQLLiteに何か起こることはありますか?私はそれがバックラウンドにプッシュされたときに気づいていませんか?
UPDATE
私は、任意の成功なしでBeginTransaction/endtransとDBの呼び出しをラップしようとしている:私は、それが成功したかのように
sqlDB.beginTransaction();
try {
result = (sqlDB.update("FormInstance", values, "InstanceId=?", new String[] { String.valueOf(form.getSubmissionId()) }) > 0);
}
finally {
sqlDB.endTransaction();
}
まだ動作しますが、データは決してcommitted.PleaseノートデバイスからDBを取り出し、更新されていないことを確認しました。
トランザクションのようなサウンドは、クエリの最後にコミットされません。あなた自身でクエリをコンパイルしようとしましたが、トランザクションブロック間でやり取りしましたか? – droidpl
@droidpl Sry-関連するトランザクションはありません。 –
データベース内で何か作業をするたびに、トランザクションが作成されますが、更新呼び出しによって舞台裏で行われます。あなたは何が起こっているのかをデバッグする暗黙のトランザクションでそれを行うことができますか? – droidpl