마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview 선택된 값 저장하는것 질문입니다.

0 추천
안녕하세요

자꾸 스스로 해결못하고 질문만 드리는거 같아 죄송합니다만

며칠간 고민했는데도 해결이 잘안되서 질문드립니다.

다름이 아니고 주소록에 db를 따로 만들어서

친구를 추가하는것을 하고 있는데요

폰 기본 주소록에 등록되어있는 친구중에 선택해서 db에 따로 저장을 하려합니다.

public class Suchfriends extends Activity {
 String tag = "cap";
 String [] name, new_name;
 int count = 0;
 ListView list;
 Button ok;
 Button cancle;
 
 dbHelper dbHelper;
 SQLiteDatabase db;
 
 String sql;
 Cursor c;
 
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.addphonenum);
  Cursor cursor = getURI();  // 전화번호부 가져오기
  int end = cursor.getCount(); // 전화번호부의 갯수 세기
  name = new String[end];   // 전화번호부의 이름을 저장할 배열 선언
 
  dbHelper = new dbHelper(this);
  try{
   db = dbHelper.getWritableDatabase();
  } catch (SQLiteException ex){
   db = dbHelper.getReadableDatabase();
  }
  //db사용하겠다
 
  list = (ListView)findViewById(R.id.friendslist);
  ok = (Button)findViewById(R.id.okbtn);
  cancle = (Button)findViewById(R.id.canclebtn);
 
  sql = "SELECT * FROM friends;";
  c = db.rawQuery(sql, null);
 
  String[] bbStr = cursor.getColumnNames();
  for(int i=0; i<bbStr.length;i++)
   // 각각의 컬럼 이름 확인
   Log.e(tag, "ColumnName " + i + " : " + cursor.getColumnName(i));
 
  if(cursor.moveToFirst()) {    //항상 처음에서 시작
   do {
    if(!cursor.getString(2).startsWith("01")) // 01로 시작하는 핸펀만
     continue;         // 이멜주소만 있는것은 제외
    // 요소값 얻기
    name[count] = cursor.getString(1);  //이름
    name[count] += "\n";
    name[count] += cursor.getString(2);  //전번
    count++;
   } while(cursor.moveToNext());
  
   new_name = new String[count];    //이멜주소 제외한 01번호 가져오기
   for(int i=0; i<count; i++) new_name[i] = name[i];  //복사
  }
  cursor.close(); // 반드시 커서 닫고
 
 
 list.setAdapter(new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_multiple_choice, // 멀티 쵸이스
    new_name));
  //listw = getListView();         // 리스트뷰
  list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  // 반드시 설정해줘야 멀티초이스
 
 
  list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  
    String mes="";
     long num[] = list.getCheckItemIds();  // 현재 체크된 id들의 배열 리턴
     if(num.length>5) {        // 최대 선택가능 갯수 제한
      list.setItemChecked(position, false); // 강제로 언첵
      Toast.makeText(Suchfriends.this,
        "5개까지만 선택이 가능합니다.",
        Toast.LENGTH_SHORT).show();
      return;
     }
     mes = "Selected Item : \n";
     for(int i=0; i<num.length;i++) {
      mes += i + " : " + name[(int)num[i]];
      mes +="\n";
     }
    ok.setOnClickListener(new View.OnClickListener() {
         
   public void onClick(View v) {               
   
    long num[] = list.getCheckItemIds();
    if(num.length>0){
     
   // db.execSQL("INSERT INTO friends VALUES (null," +" '" + qname + "','" + qphonenumber +"','" + qnumber +"','" + qemail +"');");
   //     Toast.makeText( Inputfriends.this,
     //         "저장되었습니다.",
     //         Toast.LENGTH_SHORT).show();
    
    }
   }
    });
   
        // 화면표시 - 여기서 얻어온 값들 처리하심됨
   
    Log.e(tag, mes);
    Toast.makeText(Suchfriends.this, mes, Toast.LENGTH_SHORT).show();
   }
  });
 }
    private Cursor getURI() {
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
       
        String[] projection = new String[] { // 세개만 프로젝션함
          Contacts._ID,
          ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
          ContactsContract.CommonDataKinds.Phone.NUMBER
        };
        // 정렬방식 설정
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
        return managedQuery(uri, projection, null, null, sortOrder);
    }
}
 

이런식으로 일단 코딩을 하고 이거저거 해보고 있는데요

일단 등록을 했을때 등록된 친구 화면을 보여주는곳은 따로있고

화면을 보여주는곳은 일단 db table에 저장되있는

정보를 select 해서 뿌려주고 있습니다.

위에 코딩은 현재 제 주소록을 불러와서 선택을 한뒤

이제 추가 버튼(아직 코딩작성은 안했습니다.) 을 누르면

db에 저장을 하려는 걸 구현하려고 한것입니다.

근데 현재 주소록을 배열로 불러온거라서

에디트텍스트나 이런건 insert 를 이용해서 저장하는걸 할수는있는데

배열은 어떤식으로 저장을 해야하는지 모르겠습니다.

저장하려는것은 전화번호와 이름입니다.

감이 잡히지가 않네요 ㅜㅜ
모하지모해 (300 포인트) 님이 2013년 5월 29일 질문

1개의 답변

0 추천
코드는 확인 해 보지 못 했지만, 주소록 배열의 크기와 실제 코드상 선언한 배열의 크기가 같지 않고(선언한 배열이 더 크다면)

그냥 배열값 중 값이 없는 곳에 넣어 주면 되지 않을까요? 물론 만드신 주소록 db에는 추가하는 코드를 작성하시면 되고,

그게 아니시면 arraylist 만드셔서 size값으로 가져와서 그다음 값에다가 add해주시거나 하시면 될 듯 한데요..
wind (2,240 포인트) 님이 2013년 5월 29일 답변
아.. 답변 감사합니다..
근데 제가 아직 초보라 그런지 무슨말인지 이해가 잘...ㅡ;;;;;
...