package exam.andexam;
import java.io.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
/* 자바의 네트워크 클래스 사용
public class C21_AsyncDownHtml extends Activity {
ProgressDialog mProgress;
DownThread mThread;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.c21_downhtml);
Button btn = (Button)findViewById(R.id.down);
btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mProgress = ProgressDialog.show(C21_AsyncDownHtml.this,
"Wait", "Downloading...");
mThread = new DownThread("http://www.google.com");
mThread.start();
}
});
}
class DownThread extends Thread {
String mAddr;
String mResult;
DownThread(String addr) {
mAddr = addr;
mResult = "";
}
public void run() {
StringBuilder html = new StringBuilder();
try {
URL url = new URL("mAddr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if (conn != null) {
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
for (;;) {
String line = br.readLine();
if (line == null) break;
html.append(line + '\n');
}
br.close();
mResult = html.toString();
}
conn.disconnect();
}
}
catch (Exception ex) {;}
mAfterDown.sendEmptyMessage(0);
}
}
Handler mAfterDown = new Handler() {
public void handleMessage(Message msg) {
mProgress.dismiss();
TextView result = (TextView)findViewById(R.id.result);
result.setText(mThread.mResult);
}
};
}
//*/
//* 아파치 클래스 사용
public class C21_AsyncDownHtml extends Activity {
ProgressDialog mProgress;
DownThread mThread;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.c21_downhtml);
Button btn = (Button)findViewById(R.id.down);
btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mProgress = ProgressDialog.show(C21_AsyncDownHtml.this,
"Wait", "Downloading...");
mThread = new DownThread("http://www.google.com");
mThread.start();
}
});
}
class DownThread extends Thread {
String mAddr;
DownThread(String addr) {
mAddr = addr;
}
public void run() {
HttpGet get = new HttpGet(mAddr);
DefaultHttpClient client = new DefaultHttpClient();
try {
client.execute(get,mResHandler);
}
catch (Exception e) {;}
}
}
ResponseHandler<String> mResHandler = new ResponseHandler<String>() {
public String handleResponse(HttpResponse response) {
StringBuilder html = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new
InputStreamReader(response.getEntity().getContent()));
for (;;) {
String line = br.readLine();
if (line == null) break;
html.append(line + '\n');
}
br.close();
Message message = mAfterDown.obtainMessage();
Bundle bundle = new Bundle();
bundle.putString("result", html.toString());
message.setData(bundle);
mAfterDown.sendMessage(message);
} catch (Exception e) {;}
return html.toString();
}
};
Handler mAfterDown = new Handler() {
public void handleMessage(Message msg) {
mProgress.dismiss();
String sresult = msg.getData().getString("result");
TextView result = (TextView)findViewById(R.id.result);
result.setText(sresult);
}
};
}
//*/
제가 지금 보고 있는 예제인데요
스레드가 시작되는 class DownThread extends Thread {
이 부분에 대한 궁금증이 좀 있어서요~~~
class DownThread extends Thread {
String mAddr;
DownThread(String addr) { //->이건 왜 이렇게 쓰는건지 궁금해요. publice도 아니고 private도 아니고.. 왜 쓰는지요?? "http://www.google.com" 값을 받을 함수를 선언했다고 생각하면 되는지요;; 그렇다면 스레드는 run()이 바로 실행된다고 하는데 여기서 run(String addr)로 해도 될 것 같은데 굳이 이렇게 쓰는 이유가 궁금해요;
mAddr = addr;
}
public void run() {
HttpGet get = new HttpGet(mAddr);
DefaultHttpClient client = new DefaultHttpClient();
try {
client.execute(get,mResHandler);
}
catch (Exception e) {;}
}
}
제가 주석달은 "DownThread(String addr) " 부분이 궁금한 부분인데요.. 답변 좀 부탁드릴게요
이해가 잘 안되네요~ 어떻게 생각해야하는건지...




DownThread는 Thread 클래스를 상속받아 구현한 클래스입니다.
run()메소드는 Thread클래스에서 Override된것이므로
run(String addr) 이런식으로 구현하면 오류가 발생하게 됩니다.
그래서 이럴땐 생성자를 이용하게 됩니다.
DownThread(String addr) 가 생성자이구요.
생성자를 통해 매개변수를 전달해서 구현하는 방법을 이용한것입니다.