안녕하세요

 

안드로이드 공부하고 있습니다.

 

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

   
  }