读取XML的问题
利用SAX读取写了代码,调试了一下午却一直在parse里抛异常。尼玛,Java的库函数还真心不怎么好用。
把代码贴上来先:
package com.example.gulanfinddemo; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner; public class MainActivity extends Activity { private Spinner suraIDpinner;
private QuranXmlParser quranXmlParser; final public static String ExtraStr = "FindRes"; private static final String[] m={"1","2","3","4","5"};
private ArrayAdapter<String> adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); quranXmlParser = new QuranXmlParser(); Log.v("MainActivity", "1"); try {
quranXmlParser.ReadXML("GuLan.xml");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} InitSuraIDSpinner(); suraIDpinner.setPrompt("请输入将要查询的章树"); //设置下拉列表的风格
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,m); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //将adapter 添加到spinner中
suraIDpinner.setAdapter(adapter); } public void InitSuraIDSpinner(){
suraIDpinner = (Spinner)findViewById(R.id.SuraIDSpinner);
} public void onClickSuraAyaFindBtn(View view){
Intent intent = new Intent(this, FindResActivity.class);
String selectedString = suraIDpinner.getSelectedItem().toString();
if(null==selectedString){
selectedString="NoThing";
}
intent.putExtra(ExtraStr, selectedString);
startActivity(intent);
}
}
新建一个FindResActivity,显示结果:
package com.example.gulanfinddemo; import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.TextView; public class FindResActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_res); Intent intent = getIntent();
String findReString = intent.getStringExtra(MainActivity.ExtraStr); TextView resText = (TextView)findViewById(R.id.ResText);
resText.setText(findReString);
} }
一个QuranXmlParser类:
package com.example.gulanfinddemo; import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler; import android.util.Log; public class QuranXmlParser{
private String m_res;
private volatile boolean m_isDoFind; public QuranXmlParser(){
m_isDoFind=false;
} public boolean ReadXML(String xmlString) throws ParserConfigurationException, SAXException, IOException{
Log.v("ReadXML", "1"); XMLHandler handler = new XMLHandler(); SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(xmlString,handler); Log.v("ReadXML", "2");
return true;
} }
新建一个XMLHandler,负责具体的读取XML:
package com.example.gulanfinddemo; import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.Attributes; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler; import android.R.integer;
import android.util.Log;
import android.util.Pair; public class XMLHandler extends DefaultHandler{ public static String tag = "XMLHandler";
final int quran = 0;
final int suraID = 1;
final int suraName = 2;
final int aya = 3;
final int qurantext = 4;
int currentState = 0;
String suraIDString;
String suraNameString;
String ayaID; private HashMap<String, String> m_AyaContentMap;
private Map<String, String> m_SuarIDSet;
private HashMap<String, String> m_Id2IDsHashMap; public HashMap<String, String> getAyaContentMap(){
return m_AyaContentMap;
} public Map<String, String> getSuarIDSet(){
return m_SuarIDSet;
} public HashMap<String, String> getId2IDsHashMap(){
return m_Id2IDsHashMap;
} public void startElement(String namespacesURI , String localName , String qName , Attributes atts) throws SAXException{
if(localName.equals("sura")){
if(qName.equals("suraID")){
currentState = suraID;
}
else if(qName.equals("suraName")){
currentState = suraName;
}
}
else if(localName.equals("aya")){
currentState = aya;
}
else if (localName.equals("qurantext")){
currentState = qurantext;
}
else if(localName.equals("quran")){
currentState = quran;
}
} public void endElement(String namespacesURI , String localName , String qName) throws SAXException{ } public void characters(char[] ch , int start , int length) throws SAXException{
String theString = new String(ch, start, length);
if(null != theString){ }
switch(currentState){
case suraID:{
suraIDString = theString;
}
break;
case suraName:{
suraNameString = theString;
m_SuarIDSet.put(suraIDString, suraNameString);
}
case aya:{
ayaID = theString;
}
break;
case qurantext:{
m_Id2IDsHashMap.put(suraIDString,ayaID); final String keyString = suraIDString+":"+ayaID;
m_AyaContentMap.put(keyString, theString); Log.v(tag,keyString+" "+theString);
}
break;
}
} }
然后主窗口布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView android:id="@+id/keywordLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关键字查询:"
android:paddingTop="15px"
/> <EditText android:id="@+id/keywordEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/keywordLabel"
android:layout_alignBaseline="@id/keywordLabel"
/> <Button android:id="@+id/findKeywordButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/keywordEditText"
android:layout_alignRight="@id/keywordEditText"
android:text="查找"
/> <TextView android:id="@+id/ChapterTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="章节查询:"
android:layout_below="@id/findKeywordButton"
android:paddingTop="15px" /> <TextView android:id="@+id/SuraIDText"
android:text="章:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ChapterTextView"
/> <Spinner
android:id="@+id/SuraIDSpinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/SuraIDText"
android:paddingTop="15px" /> <TextView android:id="@+id/AyaIDText"
android:text="节:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/SuraIDSpinner"
/> <Spinner android:id="@+id/AyaIDSpinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/AyaIDText"
/> <Button android:id="@+id/findChapterButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/AyaIDSpinner"
android:layout_alignRight="@id/AyaIDSpinner"
android:text="查找"
android:onClick="onClickSuraAyaFindBtn"
/>
</RelativeLayout>
显示结果窗口布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".FindResActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/FindResShow" /> <TextView android:id="@+id/ResText"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </LinearLayout>
主窗口显示:

读取XML的问题的更多相关文章
- 读取xml数据装配到字典中之应用场景
前段时间看到支付宝设置里面有个多语言这个功能,蛮有意思的,就想双休没事的话做个相关的demo玩玩,可是礼拜六被妹子拽出去玩了一天,来大上海有大半年了,基本没有出去玩过,妹子说我是超级宅男,也不带她出去 ...
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...
- MFC如何读取XML
<?xml version="1.0" encoding="utf-8"?> <Cases> <case> <No&g ...
- 使用dom4j读取xml连接数据库与之单例模式
使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...
- java DOM4J 读取XML
最近学习Java,在处理XML文档的时候,查阅相关资料,发现了DOM4J这个jre库,相对C#的XML处理来说,功能还算是跟得上 下面展示一篇我自己写的一个XML读取测试 import java.ut ...
- C#中常用的读取xml的几种方法(转)
本文完全来源于http://blog.csdn.net/tiemufeng1122/article/details/6723764,仅作个人学习之用. XML文件是一种常用的文件格式,例如WinFor ...
- wcf序列化大对象时报错:读取 XML 数据时,超出最大
错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
- 利用反射与dom4j读取javabean生成对应XML和读取XML得到对应的javabean对象集合
转自:http://blog.csdn.net/zhao19861029/article/details/8473245 首先实现生成对应的JAVAbean的XML文件方法 /** * DMO4J写入 ...
- 读取xml文件报错:Invalid byte 2 of 2-byte UTF-8 sequence。
程序读取xml文件后,系统报“Invalid byte 2 of 2-byte UTF-8 sequence”错误,如何解决呢? 1.程序解析xml的时候,出现Invalid byte 2 of 2- ...
随机推荐
- struts2获得请求参数的方式
1.用Action的属性接收参数 2.用DomainModel(域模型)接收参数 3.用ModelDriven接收参数 使用这种方式接受参数需要实现ModelDriven接口,
- 【OpenGL】VS2010环境配置 [转]
基于OpenGL标准开发的应用程序运行时需有动态链接库OpenGL32.DLL.Glu32.DLL,这两个文件在安装Windows NT时已自动装载到C:\WINDOWS\SYSTEM32目录下(这里 ...
- SQL基础语法等
--1.while循环 declare @sum int declare @i int ) begin set @sum =@sum+@i ) print @i end print @sum --2. ...
- "产品测试管理&敏捷项目管理"研讨会在深圳成功举办!
2016年1月9日,由深圳市共创力企业管理咨询发起的"产品测试管理&敏捷项目管理"研讨会在深圳南山科技园创新谷咖啡成功举办!参加此次研讨会的企业有华为.中兴.烽火.腾讯.康 ...
- 使用的组件:Jcrop
JcropImage cropping for jQuery Jcrop 是一个功能强大的 jQuery 图像裁剪插件,结合后端程序(例如:PHP)可以快速的实现图片裁剪的功能. 官网地址:http: ...
- 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题
微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ...
- [Xamarin] 調用JSON.net 來解析JSON (转帖)
上一篇文章我們提到了透過WebClient從Facebook 拿到我的JSON資料 再來我們要怎麼解析JSON格示呢?在.net 中,我們很孰悉的JSON.net,沒錯,我們依然可以在Xamarin中 ...
- C#设计模式(5)——建造者模式(Builder Pattern)
一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...
- 学习WPF——元素绑定
概念 从源对象提取一些信息,并用这些信息设置目标对象的属性 示例 在给TextBlock控件的FontSize属性赋值时,我们使用了绑定表达式 数据绑定表达式使用XAML的标记扩展(因此具有花括号)( ...
- [OpenGL] 1、环境搭建及最小系统
>_<: 首先推荐一个企业版的VC6.0自带OpenGL和DirectX,非常方便:http://pan.baidu.com/s/1mgIAGi8 PS: 要注意这里的OpenGL建立的工 ...