다음 코드는 앞서 포스팅 한 것에 대한 문제를 조금 해결 한 것이다.

즉, 버튼을 다 누르면 ANR(5초 이내 응답 없을 시 경고 메세지와 함께 프로세스 종료) 상태 처럼 버튼에 색이 들어오고 난 다음 멈춰 있는 것을 방지 한 것이다.

방법은 쓰레드를 돌려서 핸들러를 호출하여 내용을 바꾼 방식이다.

public class ImageViewActivity extends Activity{
 ProgressDialog m_progress;
 Main_Thread m_thread;
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.main);
  Button btn = (Button)findViewById(R.id.dwon);
  btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v){
    m_progress = ProgressDialog.show(ImageViewActivity.this, "Wait please", "Now Downloding");
    m_thread = new Main_Thread();
    m_thread.start();
   }
  });
 } 
 
 class Main_Thread extends Thread{
  String m_add = "http://google.com";
  String m_result = "";
  
  public void run(){
   StringBuilder sb = new StringBuilder();
   try{
    URL url = new URL(m_add);
    HttpURLConnection connect = (HttpURLConnection)url.openConnection();
    if(connect!=null){
     connect.setConnectTimeout(1000);
     connect.setUseCaches(false);
     if(connect.getResponseCode()==HttpURLConnection.HTTP_OK){
      BufferedReader br = new BufferedReader(new InputStreamReader(connect.getInputStream()));
      for(;;){
       String line = br.readLine();
       if(line==null) break;
       sb.append(line+'\n');       
      }
      br.close();
      m_result = sb.toString();
     }
     connect.disconnect();
    }
   }
   catch(Exception ex){}
   handler.sendEmptyMessage(0);
  }
 }
  
 Handler handler = new Handler(){
  public void handleMessage(Message msg){
   m_progress.dismiss();
   EditText txt = (EditText)findViewById(R.id.edit_txt);
   txt.setText(m_thread.m_result);
  }
 };
}

이 역시 아파치 라이브러리로 표현 가능하다 방법은 다음과 같다.

class Main_Thread extends Thread{
  String m_add = "http://google.com";
  String m_result = "";
  
  public void run(){
   HttpGet http = new HttpGet(m_add);
   DefaultHttpClient client = new DefaultHttpClient();
   try{
    client.execute(http,reshandler);
   }
   catch(Exception ex){}
   handler.sendEmptyMessage(0);
  }
 }
 
 ResponseHandler<String> reshandler = new ResponseHandler<String>(){
  public String handleResponse(HttpResponse response){
   StringBuilder sb = new StringBuilder();
   try{
    BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    for(;;){
     String line = br.readLine();
     if(line==null) break;
     sb.append(line+'\n');
    }
    br.close();
    Message message = handler.obtainMessage();
    Bundle bundle = new Bundle();
    bundle.putString("result", sb.toString());
    message.setData(bundle);
    handler.sendMessage(message);
   }
   catch(Exception ex){}
   return sb.toString();
  }
 };
  
 Handler handler = new Handler(){
  public void handleMessage(Message msg){
   m_progress.dismiss();
   EditText txt = (EditText)findViewById(R.id.edit_txt);
   txt.setText(msg.getData().getString("result"));
  }
 };