我是Android文件系统中的app creater xml文件。我用XmlPullParser解析了这个文件,但是我得到错误编译:“变量解析器可能没有被初始化”。我的代码:
InputStream inputStream = openFileInput("settings.xml");
XmlPullParser parser;
parser.setInput(inputStream, null);
不知道,如何修复它。我使用Intellij IDEA12和Android 2.3 SDK。
答案 0 :(得分:5)
我使用Eclipse,以下代码对我有用:
您可能错过了以下第一行:
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
xppf.setNamespaceAware(true);
XmlPullParser xpp = xppf.newPullParser();
File myXML = new File("myXML.xml"); // give proper path
FileInputStream fis = new FileInputStream(myXML);
xpp.setInput(fis, null);
答案 1 :(得分:2)
它在eclipse中的工作代码,但不知道Intellij IDEA 12p>
编写此代码以打开并从资产中获取xml 或根据您的需要进行修改
try {
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
XmlPullParser = xppf.newPullParser();
AssetManager manager = context.getResources().getAssets();
InputStream input = manager.open("createDb.xml");
xpp.setInput(input, null);
int type = xpp.getEventType();
while(type != XmlPullParser.END_DOCUMENT) {
if(type == XmlPullParser.START_DOCUMENT) {
Log.d(Tag, "In start document");
}
else if(type == XmlPullParser.START_TAG) {
Log.d(Tag, "In start tag = "+xpp.getName());
}
else if(type == XmlPullParser.END_TAG) {
Log.d(Tag, "In end tag = "+xpp.getName());
}
else if(type == XmlPullParser.TEXT) {
Log.d(Tag, "Have text = "+xpp.getText());
if(xpp.isWhitespace())
{
}
else
{
String strquery = xpp.getText();
db.execSQL(strquery);
}
}
type = xpp.next();
}
}
catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 2 :(得分:1)
您没有实例化XmlPullParser的实例。尝试:
XmlPullParser parser = Xml.newPullParser();
此外,您需要致电:
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
来自文档:
使用此调用可以更改解析器的一般行为,例如命名空间处理>或doctype声明处理。 必须在第一次调用> next或nextToken之前调用此方法。否则,抛出异常。
示例:调用setFeature(FEATURE_PROCESS_NAMESPACES,true)以便切换命名空间>处理。初始设置对应于XML Pull> Parser工厂请求的属性。如果没有请求,则默认情况下会停用所有功能。