2

私の状況はこれです。メインメニューがある OrmLiteBaseActivity があります。ボタンを押すと「バックアップモード」になり、Webサイトからバックアップsqlite dbをダウンロードしたいと思います。問題は、ファイルをアップロードしようとするとエラーは発生しませんが、ソフトウェアを閉じて再度開くまでデータベースが更新されないことです。更新はオンザフライでお願いします。

私は OrmLiteBaseActivity で次のようなものを試しました:

case BACKUP_ID:
    getHelper().close();
    Intent i = new Intent(this, Backup.class);
    this.startActivity(i);
    return true;

バックアップ アクティビティに移動し、ファイルを更新してから戻りたいのですが、次のエラーが発生しました。

11-15 19:27:45.359: ERROR/DatabaseHelper(229): Getting connectionSource called after closed
11-15 19:27:45.359: ERROR/DatabaseHelper(229): java.lang.IllegalStateException
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.getConnectionSource(OrmLiteSqliteOpenHelper.java:78)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.getDao(OrmLiteSqliteOpenHelper.java:171)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at info.dierrelabs.h4m.ormliteinterface.DatabaseHelper.getPlayerDao(DatabaseHelper.java:159)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at info.dierrelabs.h4m.team.TeamList.onCreate(TeamList.java:20)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.os.Looper.loop(Looper.java:123)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at android.app.ActivityThread.main(ActivityThread.java:4363)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at java.lang.reflect.Method.invokeNative(Native Method)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at java.lang.reflect.Method.invoke(Method.java:521)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-15 19:27:45.359: ERROR/DatabaseHelper(229):     at dalvik.system.NativeStart.main(Native Method)

足りないものはありますか?OrmLiteBaseActivity を使用すると、新しい OrmLiteBaseActivity を開くたびにデータベースが再度開かれると想定しました。私は何か間違ったことをしていますか?

4

2 に答える 2

5

あなたは何か間違ったことをしているわけではありませんが、あなたは何か異常なことをしています。

では、が呼び出されOrmLiteSqliteOpenHelper.getConnectionSource()た後に誰かが接続ソースを取得しようとしているため、エラーがログに記録されます。close()

public ConnectionSource getConnectionSource() {
    if (!isOpen) {
        // we don't throw this exception, but log it for debugging purposes
        logger.error(new IllegalStateException(), 
                    "Getting connectionSource called after closed");
    }
    return connectionSource;
}

ヘルパーでこのメソッドをオーバーライドして、メッセージをスローしないようにすることができます。

private ConnectionSource connectionSource = null;
@Override
public ConnectionSource getConnectionSource() {
    if (connectionSource == null) {
        connectionSource = super.getConnectionSource();
    }
    return connectionSource;
}

これでエラー ログ メッセージは修正されますが、問題はコピーと新しいデータベースが機能するかどうかです。2 つのデータベース コードの例を参照してください。それはあなたがしなければならないかもしれない独自のデータベースカウンターなどを維持します:

http://ormlite.com/docs/android-hello-two-dbs

于 2011-11-16T13:28:13.033 に答える
2

だから私はそれを解決しました。ユーザーがバックアップ ボタンを押すと、次のことが起こります。

case BACKUP_ID:
    getHelper().close();
    Intent i = new Intent(this, Backup.class);
    this.startActivity(i);
    return true;

次に、この接続を再度開く必要があります。実際には次のようにすることができます(sqliteファイルを交換した後):

            DatabaseHelper db = new DatabaseHelper(Backup.this);
            db.getWritableDatabase();

クラスBackupは拡張するだけActivityです。

于 2011-11-29T18:14:35.010 に答える