안녕하세요
안드로이드 공부하고 있습니다.
먼저 ListView에 전화번호 목록을 나타나게 한 이후에 체크 된 값을
SQLite에 저장 시켰습니다.
Log 로 찍어보니 정확히 저장 된거 확인 했구요
문제는 어플이 종료 후 다시 실행 시켜면
ListView에 나타나 있는 목록 중 DB에 저장 되어 있는 목록만 체크 되게 만들고 싶은데 잘 안되네요
소스 코드는 다음과 같습니다.
문제는 for문 안으로 들어가지 않고 있습니다.
v.getChildCont() // 받는 부분이 계속 0으로 출력 되는 걸로 나타나고 있는데
어디가 잘 못 되었을까요? ㅠㅠ
좀 알려주세요 부탁드리겠습니다.
수정해야 하는 부분 좀 알려주세요 !! ㅠㅠ
private void setup_listView() {
// TODO Auto-generated method stub
Toast.makeText(this, "Save", Toast.LENGTH_SHORT).show();
Cursor DB_c;
ListView v = getListView();
Adapter adapter = v.getAdapter();
db_phone = new Phone_Number_DB(this, null, null, 0);
String id;
try{
db = db_phone.getWritableDatabase();
}catch(SQLiteException ex){
db = db_phone.getReadableDatabase();
}
DB_c = db.rawQuery("SELECT id FROM phone_number;", null);
int test_count = v.getChildCount(); //현재 0으로 출력 되는 것을 확인 하였음!!
Toast.makeText(this, "test_count : "+test_count, Toast.LENGTH_SHORT).show();
while(DB_c.moveToNext())
{
for(int i=0; i<v.getChildCount(); i++)
{
Toast.makeText(this, "for 문", Toast.LENGTH_SHORT).show();
Cursor c = (Cursor) adapter.getItem(i);
id = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
Toast.makeText(this, "id : " + id, Toast.LENGTH_SHORT).show();
if(id.equals(DB_c.getString(0).toString()))
{
v.setItemChecked(i, true);
}
else
{
v.setItemChecked(i, false);
}
}
}
}
----------------------------------------------------------------------------------------------------------
아래 빨간 부분을 조금 변경하여 위의 코드를 만들었습니다.
// TODO Auto-generated method stub
ListView v = getListView();
Adapter adapter = v.getAdapter();
SparseBooleanArray checked = v.getCheckedItemPositions();
String id;
String name = null;
String number;
Cursor DB_c;
boolean bool = true;
db_phone = new Phone_Number_DB(this, null, null, 0);
try{
db = db_phone.getWritableDatabase();
}catch(SQLiteException ex){
db = db_phone.getReadableDatabase();
}
for (int i = 0; i < checked.size(); i++) {
if(checked.valueAt(i) == true) {
Cursor c = (Cursor) adapter.getItem(i);
id = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
name = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
number = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
DB_c = db.rawQuery("SELECT name FROM phone_number;", null);
while(DB_c.moveToNext()){
if(name.equals(DB_c.getString(0).toString()))
{
Log.i("TAG", name + "같은 값이 있습니다! ");
bool = false;
break;
}
else
{
bool = true;
}
}
if(bool)
{
Log.i("TAG", name + "같은 값이 없습니다 ! 새로 추가!!");
db.execSQL("INSERT INTO phone_number VALUES(null, '"+id+"', '" + name + "', '" + number +"');");
bool = false;
}
}
}