안드로이드 학습(47) - Html 소스 뷰어

2668 단어

GET 요청 보내기

URL url = new URL(path);
// 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
// , 
if(conn.getResponseCode() == 200){

}

서버에서 되돌아오는 흐름을 가져오고 흐름에서 html 원본을 읽습니다


문자열 스트링을 구축하기 때문에 new String(byte[])을 통해 구축할 수 있고 Byte Array Output Stream을 호출할 수 있습니다.toByteArray(), 스트림을 바이트 배열로 직접 변환
byte[] b = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = is.read(b)) != -1){
    // 
    bos.write(b, 0, len);
}
// 
// utf-8
text = new String(bos.toByteArray());

무분별한 처리


부호화의 출현은 서버와 클라이언트 코드표가 일치하지 않아 발생한 것이다
// 
text = new String(bos.toByteArray(), "utf-8");

핵심 코드

public class MainActivity extends Activity {

	Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			TextView tv = (TextView) findViewById(R.id.tv);
			tv.setText((String)msg.obj);
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void click(View v){
		Thread t = new Thread(){
			@Override
			public void run() {
				String path = "http://192.168.1.103:8080/baidu.html";
				try {
					URL url = new URL(path);
					// , 
					HttpURLConnection conn = (HttpURLConnection) url.openConnection();
					conn.setRequestMethod("GET");
					conn.setConnectTimeout(5000);
					conn.setReadTimeout(5000);
					// , 
					if(conn.getResponseCode() == 200){
						// , html 
						InputStream is = conn.getInputStream();
						// 
						String text = Utils.getTextFromStream(is);
						
						// , ui, 
						Message msg = handler.obtainMessage();
						msg.obj = text;
						handler.sendMessage(msg);
					}
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		};
		t.start();
		
	}

}

흐름에서 문자열 가져오기
public class Utils {

	public static String getTextFromStream(InputStream is){
		
		byte[] b = new byte[1024];
		int len = 0;
		// , , 
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		try {
			while((len = is.read(b)) != -1){
				bos.write(b, 0, len);
			}
			// 
			String text = new String(bos.toByteArray());
			return text;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}

좋은 웹페이지 즐겨찾기