검색결과 리스트
글
다음 코드는 앞서 포스팅 한 것에 대한 문제를 조금 해결 한 것이다.
즉, 버튼을 다 누르면 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"));
}
};
즉, 버튼을 다 누르면 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"));
}
};
RECENT COMMENT