Android/XmlPullParser with JSP

Android XmpPullParser with JSP

Soul-Learner 2012. 5. 11. 15:23

Android XmpPullParser with JSP

안드로이드에서 제공하는 XML 파서인 XmlPullParser를 이용하여 JSP의 XML 응답을 처리하는 예

표준 자바 API인 URL, URLConnection 클래스를 사용하여 웹서버에 접속하고 응답을 XML으로 수신 및 처리함

androidPost.jsp

<?xml version="1.0" encoding="UTF-8" ?>

<%@ page contentType="text/xml; charset=UTF-8" pageEncoding="EUC-KR"%>

<params>

<%

 request.setCharacterEncoding("UTF-8");

 String value1 = request.getParameter("key1"); 

 String value2 = request.getParameter("key2");

 System.out.println("key1="+value1);

 System.out.println("key2="+value2);

%>

<param1><%=value1%></param1>

<param2><%=value2%></param2>

</params>


AndroidWeb.java

package test.android.hello;


import java.net.*;

import java.io.*;


import org.xmlpull.v1.*;


import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;


public class AndroidWeb extends Activity {


TextView textview;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        textview = (TextView) this.findViewById(R.id.tv);

        try {

            // Construct data

            String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");

            data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("홍길동", "UTF-8");

        

            // Send data

            // 안드로이드에서는 네트워크의 접속 및 요청, 응답의 처리는 유저 쓰레드 내에서 하도록 강제하고 있으므로 

            //아래의 코드는 다시 작성되어야 한다. 아울러 응답을 받아서 화면에 반영하는 부분도 유저 쓰레드에서 작성하게 되므로

            //핸들러를 이용하여 메인 쓰레드에서 화면을 갱신하도록 변경해 주어야 한다

            URL url = new URL("http://211.183.3.170:8282/WebTest/android/androidPost.jsp");

            URLConnection conn = url.openConnection();

            // If you invoke the method setDoOutput(true) on the URLConnection, it will always use the POST method.

            conn.setDoOutput(true);

            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

            wr.write(data);

            wr.flush();

        

            // Get the response

            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));

            String line = null;

            String response = "";

            while ((line = rd.readLine()) != null) {

               response += line;

            }

            

            findName(response);

            //textview.setText(response.trim());

            wr.close();

            rd.close();

        }

        catch (Exception e) {

        }

    }

    

    /* XmlPullParser 이용 특정 엘리먼트의 값을 추출하는 예 */

    private void findName(String xmlString) {

    try {

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

factory.setNamespaceAware(true);

XmlPullParser xpp = factory.newPullParser();

xpp.setInput( new StringReader ( xmlString ) );

int eventType = xpp.getEventType();


       while (eventType != XmlPullParser.END_DOCUMENT) {

           if(eventType == XmlPullParser.START_DOCUMENT) {

            Log.i("Start document","시작태그");

           } else if(eventType == XmlPullParser.START_TAG) {

            Log.i("Start tag", ""+xpp.getName());

           

            if(xpp.getName().equals("param2")) {

            xpp.next();

            String name = xpp.getText();

            textview.setText("이름 : "+name);

            break;

            }

           } else if(eventType == XmlPullParser.END_TAG) {

            Log.i("End tag", ""+xpp.getName());

           } else if(eventType == XmlPullParser.TEXT) {

               Log.i("TEXT", ""+xpp.getText());

           }

           eventType = xpp.next();

       }

} catch (Exception e) {

Log.e("오류", ""+e.getMessage());

}

    Log.e("종료", "프로그램 종료");

    }

}


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="test.android.hello"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name" >

        <activity

            android:name=".AndroidWeb"

            android:label="@string/app_name" >

            <!-- set my class to main-->

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>