2011-11-14 1 views
2

내 상황은 여기입니다. 내 주 메뉴가있는 곳에 OrmLiteBaseActivity가 있습니다. 버튼을 누르면 "백업 모드"로 들어가고 내 웹 사이트에서 백업 sqlite db를 다운로드하려고합니다. 문제는 파일을 업로드하려고 할 때 오류가 발생하지 않지만 소프트웨어를 닫고 다시 열 때까지 db가 업데이트되지 않는다는 것입니다. 업데이트를 즉시 수행하고 싶습니다.Android에서 ORMLite를 사용하여 연결 다시 열기

나는이처럼 내 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를 열 때마다 db를 다시 열 것이라고 가정했다. 내가 뭔가 잘못하고 있는거야?

+0

@dierre 전체 예외를 게시 할 수 있습니까? 누가 그 "오류"를주고 있는지보기가 어렵습니다. – Gray

+0

물론 가능합니다. 오늘 밤 내가 할께. logcat에서 복사/붙여 넣기하는 방법이 있는지 말해 줄 수 있습니까? – dierre

+0

터미널 창에서 명령 줄에서'adb logcat'을 사용하기 만하면됩니다. 이클립스의 창에서 빠져 나올 수 있어야한다. – Gray

답변

2

그래서 나는 그것을 해결했습니다. 사용자가 백업 버튼을 누르면 다음과 같이 진행됩니다.

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

이 연결을 다시 열어야합니다. (I SQLite는 파일을 교체 후) 실제로 이런 식으로 작업을 수행 할 수 있습니다

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

클래스 BackupActivity를 확장합니다.

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

당신은 하지에 도우미에서이 메소드를 오버라이드 (override) 할 수있는 메시지를 던져 : OrmLiteSqliteOpenHelper.getConnectionSource()에서

, 그것은 close()가 호출 된 후에 누군가가 접속 소스를 얻으려고 노력하기 때문에 오류를 기록

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

오류 로그 메시지가 수정되지만 질문은 사본과 새 데이터베이스가 작동하는지 여부입니다. 두 개의 데이터베이스 코드 예제를 살펴볼 수도 있습니다. 그것은 자신의 데이터베이스 카운터 등을해야 할 수도 있습니다 유지 :

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

+0

선생님, 당신이 여기서 설명하는 방식이 정말 멋지지만, 사이트에서 문서화 된 이유는 무엇입니까? 어떤 오류가 올 것입니다. ( –

+0

문서에서 호출하는 랫 -A-tat-a-tatRatatouille이 일반적으로 발생하지는 않습니다. – Gray

+0

예 사실입니다. ,하지만 아마 그것을 모두 한 곳에 넣을 수 있습니다 :)(하지만 cz가 아닌 일반적인 것일 수도 있습니다. 어딘가에 필요합니다. sqliteDatabaseHelper와 OrmliteHelper가 둘 다 동일한 오류를 가리킬 수 있기 때문에 오류를 검색하는 방법을 알지 못했을 때 esp를 저장하지만 원시 도우미는 무시하고 버그는 해결되지 않은 상태로 남습니다. 하루가 끝날 무렵, 다음 날 신선한 검색) –