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

주소록을 스레드로 구현할때

0 추천

현재 애니메이션 및 주소록과 관련된 예제를 구현하고 있는 중입니다.

         // Handler handler;
         // Runnable runnable;
 
            Uri people = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
 
            String projection[] = new String[]{
                    ContactsContract.CommonDataKinds.Phone._ID,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                    .
                    .
                    .
                    .
및 Cursor 와 Query를 이용해서 주소록을 불러왔구요 do ~ while()문, Cursor.MoveTo~를 통하여 모든 주소록을 탐색하도록 했습니다. (이것을 그대로 onCreate()에서 사용하면 이미지와 이름, 전화번호를 불러옵니다)
레이아웃은 ListView및 Adapter로 구현하지 않았고 단순히 ImageView와 TextView를 사용해서 한개만 보여주도록 했습니다. (translate 애니메이션을 구현해야 하기에 리스트뷰를 사용하지 않았습니다.)
 
여기서 탐색하는 시간에 지연시간을 두어 주소록의 정보가 바뀌도록 스레드와 핸들러를 통해 UI를 업데이트 해주려고 합니다만... 스레드구현 방법에 문제가 있는 것같습니다.
 
public class 클래스이름 implements Runnable(){} 클래스 안에서 run()메소드에 위의 코드를 그대로 사용했는데... 한마디로 주소록 소스를 붙여넣기 했습니다.
 
    public class Runnabler implements Runnable {
       
        @Override
        public void run() {
 
do{
            Uri people = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
 
            String projection[] = new String[]{
                    ContactsContract.CommonDataKinds.Phone._ID,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                    .
                    .
                    .
} while(Cursor.moveToNext());
 
이렇게하고 시작하면 바로 보이도록 onStart() 메소드에서 handler.post(runnable)로 메세지를 전달해주고 스레드를 .start()해주니... 반응이 없네요.
 
주소록 소스에는 문제가 없는걸 보면 역시 스레드를 구현하는 방법이 잘못된 것이라 생각되는데... 그렇다면 에러라도 나면 좋겠습니다만 에러도 없고 실행은 잘됩니다. 스레드 시작이 되지 않아 UI 업데이트가 되지 않을뿐이네요...
 
무식하게 run()메소드 안에 넣은 것이 문제일까요? 아니면 잘못된점을 지적해주시면 감사하겠습니다.
 
 
CEL (1,140 포인트) 님이 2015년 5월 25일 질문
CEL님이 2015년 5월 26일 수정

1개의 답변

0 추천
 
채택된 답변
스레드 스타트 해주는 부분 소스를 보여주세요.
쿵뿌팬더 (3,440 포인트) 님이 2015년 5월 25일 답변
CEL님이 2015년 5월 28일 채택됨
아 스레드 스타트 부분은 해결했습니다. 이제 차례대로 UI를 업데이트 해주는 코딩을 구성하고 있습니다.
...