안녕하세요
자꾸 스스로 해결못하고 질문만 드리는거 같아 죄송합니다만
며칠간 고민했는데도 해결이 잘안되서 질문드립니다.
다름이 아니고 주소록에 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 를 이용해서 저장하는걸 할수는있는데
배열은 어떤식으로 저장을 해야하는지 모르겠습니다.
저장하려는것은 전화번호와 이름입니다.
감이 잡히지가 않네요 ㅜㅜ