6

私のアプリケーションはリモート REST API を使用し、ローカル データベースに greenDao を入力します。AsyncTask クラスのサービスがあります。

@Override
protected Void doInBackground(Void... params) {
    insert100RowsIntheFirstTable();
    insert100RowsIntheSecondTable();
}

各挿入メソッド内には、主にパフォーマンス向上のために使用する insertOrReplaceInTx があります。

必要なのは、メソッドのいずれかがデータの取得に失敗した場合に結果を破棄することです。同じトランザクションを通じて行われるはずです。

mDaoSession.callInTx(callable)メソッド内にあるときに、挿入メソッド呼び出しを囲むのが正しいかどうか疑問に思いinsertOrReplaceInTxます。私は正しいですか?

さらに、例外が発生した場合にトランザクションを放棄するにはどうすればよいですか? greenDao によって自動的に行われますか?

4

1 に答える 1

9

はい、コードが例外をスローできる場合は callInTx を使用します (そうでない場合は、runInTx を検討することもできます。Android の SQLite API は、これらの「ネストされた」トランザクションを処理します。

結局のところ、callInTx は、ソース コードを見ると便利な数行にすぎません。

public <V> V callInTx(Callable<V> callable) throws Exception {
    db.beginTransaction();
    try {
        V result = callable.call();
        db.setTransactionSuccessful();
        return result;
    } finally {
        db.endTransaction();
    }
}
于 2013-01-16T22:04:21.377 に答える