2012年4月13日金曜日

xmlファイルの読み込み-ファイル名を指定して読み込み

assetフォルダの中のファイルを指定して読み込む

package com.yamato.xml;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;

public class SimpleXmlPullAppActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  try {
   XmlPullParserFactory factory;
   factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();

   // assets情報の取得
   AssetManager asset = getResources().getAssets();
   // XMLファイルのストリーム情報を取得
   InputStream is = null;
   is = asset.open("test.xml");
   InputStreamReader isr = new InputStreamReader(is);
   xpp.setInput(isr);
   
   int eventType = xpp.getEventType();
   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
     System.out.println("Start document");
    } else if (eventType == XmlPullParser.START_TAG) {
     System.out.println("Start tag " + xpp.getName());
    } else if (eventType == XmlPullParser.END_TAG) {
     System.out.println("End tag " + xpp.getName());
    } else if (eventType == XmlPullParser.TEXT) {
     System.out.println("Text " + xpp.getText());
    }
    eventType = xpp.next();
   }
  } catch (XmlPullParserException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

  System.out.println("End document");
 }
}


xmlファイルの読み込み-アンドロイドデベロッパーのサンプルを試してみる。

XmlPullParser http://developer.android.com/intl/ja/reference/org/xmlpull/v1/XmlPullParser.html

アンドロイドデベロッパーのサンプルを試してみる。

package com.yamato.xml;

import java.io.IOException;
import java.io.StringReader;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;

public class SimpleXmlPullAppActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  try {
   XmlPullParserFactory factory;
   factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();

   xpp.setInput(new StringReader("<foo>Hello World!</foo>"));
   int eventType = xpp.getEventType();
   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
     System.out.println("Start document");
    } else if (eventType == XmlPullParser.START_TAG) {
     System.out.println("Start tag " + xpp.getName());
    } else if (eventType == XmlPullParser.END_TAG) {
     System.out.println("End tag " + xpp.getName());
    } else if (eventType == XmlPullParser.TEXT) {
     System.out.println("Text " + xpp.getText());
    }
    eventType = xpp.next();
   }
  } catch (XmlPullParserException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

  System.out.println("End document");

 }
}

Error: ShouldNotReachHere()


Android プロジェクトにソースをコピーしてコンパイル単位名を変更したら下のようなエラーが出た

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (classFileParser.cpp:3494), pid=2444, tid=2592
#  Error: ShouldNotReachHere()
#
# JRE version: 6.0_27-b07
# Java VM: Java HotSpot(TM) Client VM (20.2-b06 mixed mode windows-x86 )
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#


androidアプリケーションとして実行すればいいようです。