안드로이드에서 Tworld로그인을 해서 특정페이지를 TextView에 가져 오려고 합니다.

 

Tworld 로그인 예저는 http://mudchobo.tistory.com/479 사이트에 찾아서 자바콘솔에서 정상적으로 출력이 되는것을 확인 했습니다.

 

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        HttpClient httpclient = new DefaultHttpClient();
        
        String id = "t월드 아이디";
        String pw = "비밀번호";
        
        List<NameValuePair> qparams = new ArrayList<NameValuePair>();
        qparams.add(new BasicNameValuePair("URL", "http://www.tworld.co.kr/loginservlet.do?returnURL=http%3A%2F%2Fwww.tworld.co.kr&kind=&popup=&cmd=&reload=&ID=" + id));
        qparams.add(new BasicNameValuePair("ID", id));
        qparams.add(new BasicNameValuePair("PASSWORD", pw));
        qparams.add(new BasicNameValuePair("SERVERIP", "203.236.20.129"));
        qparams.add(new BasicNameValuePair("X", "0"));
        qparams.add(new BasicNameValuePair("Y", "0"));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(qparams, "UTF-8");
        HttpPost httpPost = new HttpPost("http://nicasams.sktelecom.com:2040/icas/fc/LogOnSV");
        httpPost.setEntity(entity);
        
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = "";
        HttpResponse response = httpclient.execute(httpPost);
        Header[] headers  = response.getAllHeaders();
        httpclient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet();
        if (headers.length > 1){
            String url = headers[1].getValue();
            System.out.println("url = " + url);
            httpGet.setURI(new URI(url));
            responseBody = httpclient.execute(httpGet, responseHandler);
            System.out.println(responseBody);
        }
        httpGet.setURI(new URI("http://www.tworld.co.kr/normal.do?serviceId=S_BILL0070&viewId=V_CENT0261"));
        responseBody = httpclient.execute(httpGet, responseHandler);
        
        System.out.println("result = " + responseBody);
    }
}


 

 

그래서 이 예제 그대로 안드로이드에 적용시켜봤습니다.

 

Button 하나를 만들고 그 버튼을 누르면 그 버튼 화면 아래에 있는 TextView에 결과 페이지가 나타나도록 구성했습니다.

 

하지만 버튼을 누르는 순간 오류를 나타내며 종료가 됩니다.

 

소스는 아래와 같습니다.

 

 package com.kyungwon.login;
import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.entity.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.message.*;
import android.app.*;
import android.os.*;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;
public class Login_testActivity 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.button1);
        final TextView result_page = (TextView)findViewById(R.id.textView1);
        View.OnClickListener clicked_confirm = new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    HttpClient httpclient = new DefaultHttpClient();
    String id = "test_id"; 
          String pw = "test_pw"; 
          List<NameValuePair> qparams = new ArrayList<NameValuePair>();
          qparams.add(new BasicNameValuePair("URL", "http://www.tworld.co.kr/loginservlet.do?returnURL=http%3A%2F%2Fwww.tworld.co.kr&kind=&popup=&cmd=&reload=&ID=" + id));
          qparams.add(new BasicNameValuePair("ID", id));
          qparams.add(new BasicNameValuePair("PASSWORD", pw));
          qparams.add(new BasicNameValuePair("SERVERIP", "203.236.20.129"));
          qparams.add(new BasicNameValuePair("X", "0"));
          qparams.add(new BasicNameValuePair("Y", "0"));
 
          
          UrlEncodedFormEntity entity = null;
    try {
     entity = new UrlEncodedFormEntity(qparams, "UTF-8");
    } catch (UnsupportedEncodingException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    }
   
          HttpPost httpPost = new HttpPost("http://nicasams.sktelecom.com:2040/icas/fc/LogOnSV");
          httpPost.setEntity(entity);
          
          ResponseHandler<String> responseHandler = new BasicResponseHandler();
          String responseBody = "";
          HttpResponse response = null;
    try {
     response = httpclient.execute(httpPost);
    } catch (ClientProtocolException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
          Header[] headers  = response.getAllHeaders();
          httpclient = new DefaultHttpClient();
          HttpGet httpGet = new HttpGet();
          if (headers.length > 1){
              String url = headers[1].getValue();
              //System.out.println("url = " + url);
              result_page.setText(url);
              try {
      httpGet.setURI(new URI(url));
     } catch (URISyntaxException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
              try {
      responseBody = httpclient.execute(httpGet, responseHandler);
     } catch (ClientProtocolException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
              //System.out.println(responseBody);
          }
          try {
     httpGet.setURI(new URI("http://www.tworld.co.kr/normal.do?serviceId=S_BILL0070&viewId=V_CENT0261"));
    } catch (URISyntaxException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
          try {
     responseBody = httpclient.execute(httpGet, responseHandler);
    } catch (ClientProtocolException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }    
   }
  };
  btn.setOnClickListener(clicked_confirm);
    }
}

디버그 모드를 통해 로그캣의 내용은 아래와 같습니다.

 

08-31 21:31:11.119: WARN/dalvikvm(3542): threadid=1: thread exiting with uncaught exception (group=0x40017568)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542): FATAL EXCEPTION: main
08-31 21:31:11.155: ERROR/AndroidRuntime(3542): java.lang.NullPointerException
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:626)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at com.kyungwon.login.Login_testActivity$1.onClick(Login_testActivity.java:84)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at android.view.View.performClick(View.java:2486)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at android.view.View$PerformClick.run(View.java:9130)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at android.os.Handler.handleCallback(Handler.java:587)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at android.os.Looper.loop(Looper.java:130)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at android.app.ActivityThread.main(ActivityThread.java:3694)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at java.lang.reflect.Method.invokeNative(Native Method)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at java.lang.reflect.Method.invoke(Method.java:507)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
08-31 21:31:11.155: ERROR/AndroidRuntime(3542):     at dalvik.system.NativeStart.main(Native Method)
08-31 21:31:11.178: WARN/ActivityManager(1808):   Force finishing activity com.kyungwon.login/.Login_testActivity
08-31 21:31:11.686: WARN/ActivityManager(1808): Activity pause timeout for HistoryRecord{406f00b0 com.kyungwon.login/.Login_testActivity}

 

 

만약에 제가 post값을 잘못 넣었다고 하더라도 오류값이 textview에 나타야 할 것 같은데 그대로 죽어버립니다.

 

제가 무엇을 잘못 했을까요?