본문 바로가기

안드로이드 개발/허니콤(3.0)

허니콤(3.x) 이상 버젼에서 http통신할때 (꼭 스레드와 핸들러를 사용해야합니다.) 예제포함

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

  <EditText
      android:id="@+id/input01"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:hint="Enter URL String ..."
      android:textSize="14dip"
      ></EditText>

  <Button
      android:id="@+id/requestBtn"
      android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Request"
   android:textSize="14dip"
   android:textStyle="bold"
   ></Button>
 
  <ScrollView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      >
      <TextView
          android:id="@+id/txtMsg"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#ff99ccee"
          android:textColor="#ff0000ff"
          android:textSize="12dip"
          ></TextView>
     
  </ScrollView>
     
</LinearLayout>

==================================================================================================================================

 

package com.enisystem.SampleHTTP;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class SampleHTTPActivity extends Activity {
    /** Called when the activity is first created. */
 
 public static String defaultUrl = "http://m.naver.com";

    
 @Override
    public void onCreate(Bundle savedInstanceState) {
        
     StrictMode.enableDefaults();
     
     super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Button requestBtn = (Button) findViewById(R.id.requestBtn);
       
        requestBtn.setOnClickListener(new OnClickListener() {
   
   public void onClick(View v) {
    
    // HttpThread 생성 및호출
    HttpThread thread = new HttpThread();
    //thread.setDaemon(true);
    thread.start();
    
   }
  });
    }

   
   
   
   private String request (String urlStr){
    StringBuilder output = new StringBuilder();
   
    try{
     URL url = new URL(urlStr); // URL 객체생성
    
     Toast.makeText(this,urlStr, Toast.LENGTH_SHORT).show();
    
     HttpURLConnection conn = (HttpURLConnection)url.openConnection();
     if(conn != null){
      conn.setConnectTimeout(10000);
      conn.setRequestMethod("GET");
      conn.setDoInput(true);
      conn.setDoOutput(true);
     
      int resCode = conn.getResponseCode(); // 서버에 접속하여 요청
      if(resCode == HttpURLConnection.HTTP_OK){
      
       BufferedReader reader = new BufferedReader( // 응답 결과를 읽기위한 스트림 객체 생성
         new InputStreamReader(conn.getInputStream()));
       String line = null;
      
       while(true){
        line = reader.readLine(); // 반복문 안에서 한 주씩 읽어 결과 문자열에 추가
        if( line == null){
         break;
        }
        output.append(line + "\n");
       }
       reader.close();
       conn.disconnect();
      
      }
     
     
     }
    
    
    } catch(Exception ex){
    
     Toast.makeText(this,"Exception in processing response.", Toast.LENGTH_SHORT).show();
     Log.e("SampleHTTP" , "Exception in processing response.", ex);
    }
   
    return output.toString();
   }
  
   public class HttpThread extends Thread {
    public void run(){
     
     // 핸들러 호출
     mHandler.sendEmptyMessage(0);
    }
}

   Handler mHandler = new Handler()
   {
  
    // 핸들러가 호출되면 이쪽 함수가 실행됩니다.

    public void handleMessage(Message msg)
    {
    
     if(msg.what == 0)
     {
     
   // 여기다가 코딩
          
      final EditText input01 = (EditText) findViewById(R.id.input01);
             input01.setText(defaultUrl);
            
             final TextView txtMsg = (TextView) findViewById(R.id.txtMsg);
       
       
       String urlStr = input01.getText().toString(); // URL 문자열 참조
    String output = request(urlStr);  // request()메소드 호출
    
    txtMsg.setText(output); // 결과물 표시
     
     }
    }
   };
 
   
}