2011-11-14 20 views
2

私の状況はこれです。メインメニューがあるところにOrmLiteBaseActivityがあります。ボタンを押すと「バックアップモード」に入り、私のウェブサイトからバックアップsqlite dbをダウンロードしたいと思う。 問題は、ファイルをアップロードしようとするとエラーは表示されませんが、ソフトウェアを閉じて再オープンするまでdbは更新されません。アップデートをオンザフライにしたいと思います。AndroidでORMLiteを使用して接続を再開する

私はOrmLiteBaseActivityにこのような何か試してみた

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) 
:私は、私は戻りたいが、私はこのエラーを得た、バックアップアクティビティに移動し、ファイルを更新

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

ザ・を

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

+0

例外@dierre全体を投稿できますか?誰がその「エラー」を出すのかを知ることは難しいです。 – Gray

+0

はい、もちろんです。今夜はやるよ。 logcatからコピー/貼り付けする方法があるかどうか教えてください。 – dierre

+0

私は端末ウィンドウのコマンドラインから 'adb logcat'を使うだけです。あなたはEclipseのウィンドウからもそれを得ることができるはずです。 – Gray

答えて

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を拡張します。

5

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

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; 
} 

あなたはないにあなたのヘルパーにこのメソッドをオーバーライドすることができ、メッセージを投げる:OrmLiteSqliteOpenHelper.getConnectionSource()

は、それがclose()が呼び出された後、誰かが接続元を取得しようとしているため、エラーを記録します

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

+0

あなたがここで説明する方法は本当にいいですが、サイト上で文書化された理由は何ですか? ( –

+0

私はこれが一般的な出現であるかどうかわかりません@ Rat-a-tat-a-tatRatatouilleドキュメントで呼び出すことがあります。 – Gray

+0

はい真です、しかし、おそらくそれをすべて1つの場所に置くことができる:)かもしれない..(ただし、czは一般的ではないかもしれませんが、sqliteDatabaseHelperとOrmliteHelperの両方が同じエラーを指している可能性があるので、エラーの検索方法がわからないときは時間を節約しますが、ネイティブヘルパーは代わりにバグを未解決のままこの日の終わりには、翌日の新鮮な検索で) –

関連する問題