비동기 다운로드에는 스레드, 타이머 이벤트가 사용되었습니다. 아래 포스트를 참고하세요
예제소스
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class AsyncDownHtml extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.Button01); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { //다운로드할 동안 프로그래스 대화상자를 보여줍니다. mProgress = ProgressDialog.show(AsyncDownHtml.this, "wait", "Downloding..."); //스레드를 생성하고 스레드를 시작합니다. mThread = new DownThread("http://www.google.com"); mThread.start(); } }); } private ProgressDialog mProgress; DownThread mThread; //다운로드를 받는 작업 스레드 class DownThread extends Thread { String mAddr; //데이터를 가져올 서비스 URL 주소 String mResult; //리턴할 결과값 DownThread(String addr) { mAddr = addr; mResult = ""; } public void run() { mResult = DownloadHtml(mAddr); //핸들러 호출 mAfterDown.sendEmptyMessage(0); } } String DownloadHtml(String mAddr) { 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(); } conn.disconnect(); } }catch(Exception e){} return html.toString(); } Handler mAfterDown = new Handler() { public void handleMessage(Message msg) { //가져온 결과값을 에디트에 출력한다. EditText result = (EditText) findViewById(R.id.EditText01); result.setText(mThread.mResult); //프로그래스 대화상자를 종료합니다. mProgress.dismiss(); } }; }
'안드로이드 정복' 카테고리의 다른 글
전체화면 사용하기 (Status bar, Title bar 숨기기) (0) | 2010.08.16 |
---|---|
스레드와 핸들러 (1) | 2010.08.13 |
네트워크 - HTML 읽기 (1) | 2010.08.09 |
네트워크 - 인터넷 연결 관리자 (0) | 2010.08.09 |
옵션 메뉴 만들기 (0) | 2010.08.02 |