package com.example.search;
import java.util.ArrayList;
import android.R.integer;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.Contacts;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.RawContacts.Data;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentUris;
import android.database.Cursor;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private String[] nameList;
private String[] phoneList;
private ArrayList<String> list;
private ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList<String>();
new loadContectsData().execute("");
}
private class loadContectsData extends AsyncTask<String, Void, Void> {
private String Content;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(MainActivity.this);
protected void onProExecute() {
Dialog.setMessage("정보 로딩중");
Dialog.show();
}
protected Void doInBackground(String...urls) {
getContactsData();
return null;
}
protected void onPostExecute(Void unused) {
Dialog.dismiss();
ListView listView = (ListView)findViewById(R.id.list);
arrayAdapter = new ArrayAdapter<String>(getBaseContext() ,
android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
EditText findText = (EditText)findViewById(R.id.input);
findText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
findName(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
// TODO Auto-generated method stub
}
});
if (Error != null) {
Toast.makeText(MainActivity.this, Error, Toast.LENGTH_SHORT).show();
}
}
}
public void getContactsData() {
Cursor c = this.getContentResolver().query(
Contacts.CONTENT_URI, new String[] { BaseColumns._ID }, null, null,null);
c.moveToFirst();
if (c.getCount() > 0) {
nameList = new String[c.getCount()];
phoneList = new String[c.getCount()];
for ( int i = 0; i < c.getCount(); i++) {
try {
String _id = c.getString(c.getColumnIndex(BaseColumns._ID));
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, Integer.parseInt(_id));
Uri dataUri = Uri.withAppendedPath(contactUri, Data.CONTENT_DIRECTORY);
Cursor c2 = this.getContentResolver().query(
dataUri,
new String[] {
BaseColumns._ID, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3,
Data.DATA4, Data.DATA5, Data.DATA6, Data.DATA7, Data.DATA8,
Data.DATA9, Data.DATA10, Data.DATA11, Data.DATA12, Data.DATA13,
Data.DATA14, Data.DATA15 },
null, null, null );
try {
while ( c2.moveToNext() ) {
if( !c2.isNull(c.getColumnIndex(BaseColumns._ID)) )
{
String mimeType = c2.getString(c2.getColumnIndex(Data.MIMETYPE));
if ( mimeType.equals(StructuredName.CONTENT_ITEM_TYPE)) {
nameList[1] = c2.getString(c2.getColumnIndex(StructuredName.DISPLAY_NAME));
}else if (mimeType.equals(Phone.CONTENT_ITEM_TYPE)) {
phoneList[1] = c2.getString(c2.getColumnIndex(Phone.NUMBER));
}
}
}
} finally
{
c2.close();
}
list.add(nameList[1]);
c.moveToNext();
} catch (Exception e)
{
}
}
}
}
public void findName (String findString)
{
if (findString.length() > 0)
{
String onlyChosungString = hangulToOnlyChosung(findString);
list.clear();
for (int i = 0; i < nameList.length; i++)
{
String onlyChosungNameString = hangulToOnlyChosung(nameList[1]);
if (onlyChosungNameString.matches(onlyChosungString+".*"))
{
list.add(nameList[1]);
}
}
arrayAdapter.notifyDataSetChanged();
}
else
{
list.clear();
for (int i = 0; i < nameList.length; i++)
{
list.add(nameList[1]);
}
arrayAdapter.notifyDataSetChanged();
}
}
final static char[] chosungWord = {
0x3131, 0x3132, 0x3134, 0x3137, 0x3138,
0x3139, 0x3141, 0x3142, 0x3143, 0x3145,
0x3146, 0x3147, 0x3148, 0x3149, 0x314a,
0x314b, 0x314c, 0x314d, 0x314e,
};
public String hangulToOnlyChosung(String s)
{
int chosungNum, tempNum;
String resultString = "";
for (int i = 0 ; i < s.length(); i++)
{
char ch = s.charAt(i);
if (ch != ' ')
{
if (ch >= 0xAC00 && ch <= 0xD7A3)
{
tempNum = ch - 0xAC00;
chosungNum = tempNum / (21 * 28);
resultString += chosungWord[chosungNum];
}
else
{
resultString += ch;
}
}
}
return resultString;
}
}
이게 소스 전분데요
xml은 에디트텍스트랑 리스트뷰만 넣어구요
위 코딩대로 했는데 에러는 안뜨고 실행하면 종료되버리더라구요.
뭐가 문제인지 아시는분 ㅠㅠ