버튼을 누르면 서버에 정보를 전송합니다.
정보를 올리는 동안 프로세스 다이얼로그를 띄우려고 하는데요
버튼 클릭시 ProgressDialog pd를 띄워줍니다.
참고로 context는 onCreate에서 context=this;라고 적어놓았습니다.
btn_doreport.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(isOnline()==true)
{
pd = ProgressDialog.show(context, "", "전송중..", true, false);
Thread thread = new Thread(this);
thread.start(); //쓰레드에선 HttpFileUpload(url, null, GlobalAttribute.FilePath); 이라는 서버로 정보전송하는 함수실행합니다.
} else
{
Toast.makeText(getApplicationContext(), "인터넷이 연결 되지 않았습니다.", 0);
}
}
});
핸들러는 그냥 프로세스 다이얼로그를 사라지게 하는 단순한 기능만 있습니다.
private Handler handler = new Handler(){
public void handleMessage(Message msg){
pd.dismiss();
}
};
그런데, 여기서 문제는 clicklistener 자체가 event handler라 그런지 -아마도 우선순위가 매우 높은...
(혹시 제가 잘못알고 있는 거라면... 조언 부탁드립니다 ^^;;;)
onClick 내부의 문장들을 다 수행하고 나서 UI가 업데이트 되는 것 같더군요.
서버에 전송이 되는 동안 프로세스 다이얼로그가 뜨지 않고 전송이 끝난다음 다이얼로그가 뜨고 바로 사라집니다.
(참고로 onCreate안에서 저 문장을 수행하면 전송하는 중에는 프로세스 다이얼로그가 뜹니다!)
그래서 혹시 context문제인가 하고 액티비티에 OnClickListener를 구현하여 봤지만 마찬가지 였습니다.
@Override //버튼 클릭 메서드
public void onClick(View v) {
switch(v.getId())
{
case R.id.Btn_doreport:
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
pd = ProgressDialog.show(context, "", "전송중..", true, false);
}
});
v.postDelayed(new Runnable(){
public void run(){
HttpFileUpload(url, null, GlobalAttribute.FilePath);
handler.sendEmptyMessage(0);
}
}
, 0);
}
}
쓰레드는 별로 안 써봐서 제가 잘못쓰는 것 같기도 합니다..
현재 뚜렷한 해결책을 찾지 못하고
정안되면 그냥 activity를 새로 생성하여 onCreate에서
프로세스 다이얼로그를 띄우려고 합니다~
너무 장문의 글을 써서 죄송합니다. ㅠㅠ
한줄로 요약하자면
'버튼을 눌렀을 때 서버에 정보를 전송하는데 그 사이에 진행바를 띄우고 싶다!'
입니다.
여기까지 글을 봐주셔서 감사합니다 ^^



