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

안드로이드 검색 기능 구현 질문드립니다 ㅜ ㅜ!!

0 추천
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은 에디트텍스트랑 리스트뷰만 넣어구요

위 코딩대로 했는데 에러는 안뜨고 실행하면 종료되버리더라구요.

뭐가 문제인지 아시는분 ㅠㅠ
익명사용자 님이 2013년 9월 24일 질문
밑에 다른 분들이 답변을 달으셨지만
개발 공부를 하실때 제일 처음 배우셔야 할 것은 로그를 보는 방법과 구글 검색입니다.
이 경우는 로그를 보는 방법인데, 이클립스로 개발하실 것이고 그렇다면 따로 볼 필요없이 이클립스에 로그캣이 있습니다. 아무 설정 하지 않으셔도 왠만하면 나옵니다. 그냥 보시면 되요. ㅠㅠ

2개의 답변

0 추천
에러가 안날리는 없어 보이고....

try catch에서 에러가 잡힌듯 하네요.

exception 로그 찍어 보세요.
아나콘다v (4,670 포인트) 님이 2013년 9월 24일 답변
답글 감사합니다.
exeption 로그를 찍어 보라고 하신게
어떻게 하는걸 말씀하시는거죠?
catch (Exception e)
      {}
에서
e에 어떤 내용이 나오는지 보시면 됩니다.
0 추천
eclipse 쓰시면 LogCat에 에러 메시지 출력되는거 확인해보세요 ㅎ
kaiser38 (330 포인트) 님이 2013년 9월 25일 답변
...