안드로이드 웹 통신하기


안드로이드 진저브레드 이상에서는 Main Thread에서 네트워킹 관련 클래스 사용하면 에러가 발생합니다.

그래서 네트워킹 관련 클래스를 사용할때는 다른 Thread를 사용해야 합니다.



아래 예제는 String인 urlStr에 입력되어있는 웹페이지의 내용을 가져와서 TextView에 보여주는 예제입니다.

HttpUrlConnection은 네트워킹 관련 클래스 이므로 별도의 Thread를 생성해서 사용해야합니다.

HttpURlConnection을 사용 할 때 몇가지 속성을 더 추가해 줄 수 있습니다.

  • .setConnectTime(10000) - 해당 웹 페이지 연결시간을 10초로 설정
  • .setRequestMethod("POST") - Get/Post 방식 설정 
  • .setDoOutput(true) - outputStream으로 데이터를 넘겨주겠다고 설정
  • .setDoInput(true) - InputStream으로 데이터를 읽겠다고 설정  
  • .getResponseCode() - 연결 상태 확인
아래 코드에서 getResponseCode()를 통해 웹 페이지와 연결이 됐는지 확인하고 됐으면 웹 페이지의 글들을 가져와서 textView에 보여줍니다.
연결되지 않았다면 에러 발생이라는 토스트 메세지를 보여줍니다.
class mThread extends Thread{
@Override
public void run() {
try {
URL url = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
if(urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
urlConnection.disconnect();
}else{
Toast.makeText(getApplicationContext(), "에러발생", Toast.LENGTH_SHORT).show();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

public void readStream(InputStream in){
final String data = readData(in);
mHandler.post(new Runnable() {
@Override
public void run() {
tv.setText(data);
}
});
}
public String readData(InputStream is){
String data = "";
Scanner s = new Scanner(is);
while(s.hasNext()) data += s.nextLine() + "\n";
s.close();
return data;
}

Handler mHandler = new Handler();


아래 예제는 HttpURLConnection을 사용했습니다.

 


  


 


https://github.com/Ywook/AndroidPractice12


+ Recent posts