2011-03-04 5 views
0

이벤트에 대한 정보를 보여주는 개인 SQLite DB에서 채워지는 목록보기가 있습니다. 이벤트의 설명 페이지에서 체크 박스를 사용하여이 이벤트를 "즐겨 찾기"하는 방법을 만들려고합니다. 이 코드는 사용자가 확인란을 선택하고 onPause()를 시작하면 데이터베이스를 업데이트하려고 시도합니다.SQLite 데이터베이스 업데이트 문제

데이터베이스에서 행을 업데이트하는 몇 가지 예를 찾았지만 시도 할 때마다 항상 방해가되는 것처럼 보입니다. NullPointerException가 발생합니다.

이 문제를 해결하는 데 도움이되는 다른 코드가 있는지 알려주십시오. DataBaseHelper

public void updateRow(long rowId, Integer mySchedule) { 
    if(mySchedule != null){ 
    ContentValues args = new ContentValues(); 
    args.put("mySchedule", mySchedule); 
    myDataBase.update(DATABASE_PANELS_TABLE, args, "_id=" + rowId, null); 
    } 
} 
에서에 updateRow 코드 여기

@Override 
protected void onPause() { 
    super.onPause(); 
    DataBaseHelper myDbHelper = new DataBaseHelper(this); 
    if (panelCheckBox.isChecked()) { 
     int mySchedule = 1; 
     myDbHelper.updateRow(mRowId, mySchedule); 
    } 

된다 : 여기

는 사용자들이 체크 박스를 선택했는지 확인하기 위해 설명 활동에서 멀리 이동할 때 내가 전화 코드입니다

여기에 로그 캣에서 오류입니다 : 그래서

ERROR/AndroidRuntime(689): Uncaught handler: thread main exiting due to uncaught exception 

ERROR/AndroidRuntime(689): java.lang.RuntimeException: Unable to pause activity {com.tagrost.AndroidConventionApp/com.tagrost.AndroidConventionApp.PanelDescActivity}: java.lang.NullPointerException 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3162) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3119) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3102) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.access$2400(ActivityThread.java:119) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1874) 

ERROR/AndroidRuntime(689):  at android.os.Handler.dispatchMessage(Handler.java:99) 

ERROR/AndroidRuntime(689):  at android.os.Looper.loop(Looper.java:123) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.main(ActivityThread.java:4363) 

ERROR/AndroidRuntime(689):  at java.lang.reflect.Method.invokeNative(Native Method) 

ERROR/AndroidRuntime(689):  at java.lang.reflect.Method.invoke(Method.java:521) 

ERROR/AndroidRuntime(689):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860 

ERROR/AndroidRuntime(689):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

ERROR/AndroidRuntime(689):  at dalvik.system.NativeStart.main(Native Method) 

ERROR/AndroidRuntime(689): Caused by: java.lang.NullPointerException 

ERROR/AndroidRuntime(689):  at com.tagrost.AndroidConventionApp.DataBaseHelper.updateRow(DataBaseHelper.java:198) 

ERROR/AndroidRuntime(689):  at com.tagrost.AndroidConventionApp.PanelDescActivity.onPause(PanelDescActivity.java:67) 

ERROR/AndroidRuntime(689):  at android.app.Activity.performPause(Activity.java:3782) 

ERROR/AndroidRuntime(689):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1190) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3149) 
+0

'ERROR/AndroidRuntime (689) : com.tagrost.AndroidConventionApp.DataBaseHelper.updateRow에서 (DataBaseHelper.java:198)'어떤 행이 198입니까? 문제가있는 곳이어야합니다. –

+0

myDataBase.update (DATABASE_PANELS_TABLE, args, "_id ="+ rowId, null); – Tag

+0

큰 문제는 데이터베이스 업데이트가 onPause와 관련이없는 이유는 무엇입니까? 활동을 열고 영구적으로두면 데이터베이스를 엽니 다. 체크 박스를 클릭하고 데이터베이스를 완료하면 데이터베이스를 업데이트하십시오. onPause를 사용하여 다시 그리기를 강요하려고합니까? – jcwenger

답변

0

의 진짜 원인은 문제가 간단 해 보입니다. 새 dbHelper를 만들었지 만 명시 적으로 데이터베이스를 열지 않았습니다. 표준 Android Notepad tutorial과 거의 유사하게 보입니다. 그것을 당겨 NotesDbAdaptorSQLiteOpenHelper을 감싸는 방식을 봅니다. myDbHelper를 사용하려면 먼저 myDbHelper.open()에 대한 호출이 필요합니다.

또 다른 중요한 변경 사항은 메모장 샘플에 표시된 것과 동일한 패턴을 따르는 것입니다. db를 멤버 변수로 유지해야합니다. 새 변수로 초기화 한 다음 onCreate()에서 열면됩니다. (데이터베이스를 여는 데 0.5 초가 걸릴 수 있습니다. 모든 변경 시마다 init에서 한 번 수행하는 것이 좋습니다.) Notepadv1.java의 예를 참조하십시오.

다시 말하지만,이 메모장 샘플은 수행중인 작업과 매우 유사합니다. 튜토리얼의 2 단계에서 세부 정보 페이지를 열어 세부 정보 페이지를 여는 것처럼 메모를 편집합니다. 그런 다음 3 단계에서는 onPause 및 onResume과 같은 라이프 사이클 이벤트에서 견고한 방법을 정확하게 보여줍니다. 처음으로 할 때 까다 롭습니다. 단계별로 단계별로 진행하는 과정을 거치고 상황에 적응하고 동일하게 수행하십시오. 그러면 곧 받아 들여야합니다.

관련 문제