안드로이드 개발 질문/답변
(글 수 45,052)
노트패드 edit수정시 궁금한점..
제가 노트패드 edit부분에서 가장 궁금한부분은....
위에 내용이 잘이해가 안됩니다... 대략적인 내용이 리스트에 선택된 RowId값이 있으면 edit에다가 뿌려주는것같다는 느낌은옵니다
제가 하고 싶은 것은
테이블 test
name - abc
pass - 1234
이런 db값이 있습니다... 오로지 레코드는 하나입니다...
노트패드를 이용해서 제가 수정을 했습니다... 저장도 잘되고 불러와지는것도 잘되었습니다....
근데 문제가.....
메인(엑티비티) -> 셋팅(엑티비티) 넘어가는 단계에서
셋팅(엑티비티) 값이 없으면 rowId값이 즉(셋팅이 아직안되어있다면 or 디비에 아직값이 없다면)
editText에 공백을 표시해서 입력을 하라고 나오게 하고 싶구요...
만약에 rowId값이 있다면 레코드(1번)을 가져와서 뿌려지게 하고 싶습니다...
----------------------------------------------------------------------------------------------
그래서 제가 했던 방법은
mRowId = getLong(TestDbAdapter.F_ROWID);
// 바로 요부분이 잘못된것 같습니다.. 요부분을 어떻게 처리해야지 rowId에 값이 있는지 없는지 알수 있나요???
// 제가 아직 부족한 관계로 잘 안되는것 같습니다... 도움 부탁드리겠습니다. ^^;;
mRowId = savedInstanceState != null ? savedInstanceState.getLong(NotesDbAdapter.KEY_ROWID) : null; if (mRowId == null) { Bundle extras = getIntent().getExtras(); mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID) : null; } populateFields();
제가 노트패드 edit부분에서 가장 궁금한부분은....
위에 내용이 잘이해가 안됩니다... 대략적인 내용이 리스트에 선택된 RowId값이 있으면 edit에다가 뿌려주는것같다는 느낌은옵니다
제가 하고 싶은 것은
테이블 test
name - abc
pass - 1234
이런 db값이 있습니다... 오로지 레코드는 하나입니다...
노트패드를 이용해서 제가 수정을 했습니다... 저장도 잘되고 불러와지는것도 잘되었습니다....
근데 문제가.....
메인(엑티비티) -> 셋팅(엑티비티) 넘어가는 단계에서
셋팅(엑티비티) 값이 없으면 rowId값이 즉(셋팅이 아직안되어있다면 or 디비에 아직값이 없다면)
editText에 공백을 표시해서 입력을 하라고 나오게 하고 싶구요...
만약에 rowId값이 있다면 레코드(1번)을 가져와서 뿌려지게 하고 싶습니다...
----------------------------------------------------------------------------------------------
그래서 제가 했던 방법은
sDbHelper = new TestDbAdapter(Main.this); sDbHelper.open(); // 디비를 열어 주고 mRowId = getLong(TestDbAdapter.F_ROWID); // 이부분이 아닌것 같습니다 ㅡㅡ;; 분명 db에 값이 있는데 자꾸 Null만 가지고 옵니다.. ㅡㅡ;;; if(mRowId != null){ //mRowId값이 있다면 mRowId = 1L; // 저는 레코드가 하나이기 때문에 혹시몰라서 ㅡㅡ;;; 무식한방법으로 1이라고 지정했습니다. Cursor set = sDbHelper.fetchTest(mRowId); startManager(set); //커서 에다가 mRowId값을 넣어줍니다. //rowId값이 있다면 editText에다가 값을 넣어줍니다... USER = setText(set.getString( set.getColumnIndexOrThrow(TestDbAdapter.F_NAME))); PASS = setText(set.getString( set.getColumnIndexOrThrow(TestDbAdapter.F_PASS))); }
mRowId = getLong(TestDbAdapter.F_ROWID);
// 바로 요부분이 잘못된것 같습니다.. 요부분을 어떻게 처리해야지 rowId에 값이 있는지 없는지 알수 있나요???
// 제가 아직 부족한 관계로 잘 안되는것 같습니다... 도움 부탁드리겠습니다. ^^;;
2010.01.25 17:21:10
Bundle extras = getIntent().getExtras();
Long mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
이렇게도 해봤는데 음.. 널값이 나오는것 같은데.. 다시 한번 컴파일해보겠습니다..
Long mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
이렇게도 해봤는데 음.. 널값이 나오는것 같은데.. 다시 한번 컴파일해보겠습니다..
2010.01.25 17:23:41
위에처럼
Bundle extras = getIntent().getExtras();
Long mRowId = extras.getLong(TestDbAdapter.F_ROWID);
이렇게 하니깐 어플자체 에러로 들어가지지도 않습니다 ㅠㅠ;;;
아마 이부분은 리스트부분에서 수정부분 같은데요;; 아마 선택된 리스트값을 가지고와서 rowId값을 주는것 같습니다...
하지만 전 선택된 리스트가 아닙니다... 무조건 레코드는 하나이고 첫번째 레코드가 있는지 없는지만 알면 될것 같은데...;;;
Bundle extras = getIntent().getExtras();
Long mRowId = extras.getLong(TestDbAdapter.F_ROWID);
이렇게 하니깐 어플자체 에러로 들어가지지도 않습니다 ㅠㅠ;;;
아마 이부분은 리스트부분에서 수정부분 같은데요;; 아마 선택된 리스트값을 가지고와서 rowId값을 주는것 같습니다...
하지만 전 선택된 리스트가 아닙니다... 무조건 레코드는 하나이고 첫번째 레코드가 있는지 없는지만 알면 될것 같은데...;;;
2010.01.25 18:43:30
다른 형태의 소스를 올려 봅니다...
mDbHelper = new NotesDbAdapter(this);
mDbHelper.open();
fillData();
private void fillData() {
Cursor c = mDbHelper.fetchAllNotes();
c.moveToFirst();
while (c.isAfterLast() == false) {
if(c.getString(0) !=
null
){
USER = setText(c.getstring(c.getColumnIndexOrThrow(NotesDbAdapter.F_NAME)));
PASS = setText(c.getstring(c.getColumnIndexOrThrow(NotesDbAdapter.F_PASS)));
.............
}
c.moveToNext();
}
발췌한 소스 입니다...
super.onActivityResult(requestCode, resultCode, intent);
Bundle extras = intent.getExtras();
switch(requestCode) {
case ACTIVITY_CREATE:
String title = extras.getString(NotesDbAdapter.KEY_TITLE);
String body = extras.getString(NotesDbAdapter.KEY_BODY);
mDbHelper.createNote(title, body);
fillData();
break;
case ACTIVITY_EDIT:
Long mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID); <<------------- 이부분 같습니다
if (mRowId != null) {
String editTitle = extras.getString(NotesDbAdapter.KEY_TITLE);
String editBody = extras.getString(NotesDbAdapter.KEY_BODY);
mDbHelper.updateNote(mRowId, editTitle, editBody);
}
fillData();
break;
}
도움이 되셨나 모르겠습니다...