다른분들의 도움으로 어느 정도 까지는 된거 같은데요 ... 개념이 아직 안 잡혀서 그런지 어렵네요 ;ㅁ;
일단 먼저 쓰레드 클레스를 만들었습니다..
class DilogThread extends Thread{ public void run() { dialog = ProgressDialog.show(Main.this, "", "날씨를 불러 오고 있습니다........", true); } }
이렇게 말이죠 ... 그리고... create()에 가서 사용을 해 줬습니다..
(new DilogThread()).start();
이렇게요..
그런데 애러가 나서 로그켓을 보니
10-08 04:46:23.485: ERROR/AndroidRuntime(392): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
이런 애러가 있어서 검색을 했습니다... Handler 를 사용 하라고 해서 ...
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
(new DilogThread()).start();
}
}, 3000);
이렇게 사용을 해 줬는데요....
여전히 안되네요 ;ㅁ;
아직 쓰레드와 헨들러를 아예 모르는 초보입니다...
도움 부탁 드리겠습니다 ;ㅁ;
제가 해본 바로는.... Thread 실행시 Thread는 UI쪽을 갱신할 수 없도록 되어 있는 것으로 알고 있습니다.
웹에 접속해서 데이터를 받아오거나 혹은 내부 DB 검색의 경우 데이터를 받아오는 프로세스는 Thread에 구현하더라도
받아온 데이터를 화면에 뿌려주는 부분은 Thread 내에서 처리할 수 없도록 되어 있습니다.
따라서, handler 객체를 하나 생성하셔서 Thread 내에서 handler로 메시지를 보내는 방식으로 처리하여야 할 겁니다.
예시로는....아래같이 코딩하면 되지 않을까 싶습니다....
저도 Thread로 데이터를 받아와서 화면에 뿌려주는 부분에 대해서 애를 좀 먹었는데
솔직히 지금도 정확히 이해하고 있는지 모르겠습니다.
관련된 정보들은 검색어를 'Thread'로 하시기 보다 'handler'로 검색해서
검색사이트를 살펴보시면 원하시는 정보를 얻으실 수 있을 겁니다.
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
dialog = ProgressDialog.show(Main.this, "", "날씨를 불러 오고 있습니다........", true);
}
};class
DilogThread
extends
Thread{
public
void
run() {
//날씨를 불러오는 프로세스를 이곳에서 실행합니다. 그리고....
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
}
}
UI는 UI스레드에서만 갱신이 됩니다.
(new DilogThread()).start(); 이것은 새로 스레드를 만들어서 시작하겠다는거죠...
그안에서 다이얼로그를 띄우기 위해서는
dialog = ProgressDialog.show(Main.
this
,
""
,
"날씨를 불러 오고 있습니다........"
,
true
);
이게 handler를 통해서 실행되어야 합니다.
handler.post나 handler.sendMessage같은걸 이용해서 말이죠....
handler.post에 (new DilogThread()).start(); 이걸 넣는것은 말이 안된다는거죠...
기껏 UI스레드에 실행할라고 했는데 새 스레드를 만들어서 실행하는샘이니까요....