비동기 다운로드에는 스레드, 타이머 이벤트가 사용되었습니다. 아래 포스트를 참고하세요


예제소스

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();
    	}
    };
}

Posted by 피곤키오
,