gpt4 book ai didi

android - XmlPullParser - 意外 token (android)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:21:08 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它将从我在 res/xml/experiment.xml 中存储的 xml 中读取,但是当我尝试解析它时,它会给我一个 xmlPullParserException。

这是我非常简单的 xml 文件:

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

这是我的代码:

    public static void parse(Context ctx) throws XmlPullParserException, IOException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();

InputStream in = ctx.getResources().openRawResource(R.xml.experiment);

xpp.setInput(in, "UTF_8");

int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) {
String tagName = xpp.getName();

switch (eventType) {
case XmlPullParser.START_TAG:
Log.d("debug", "Entering tag: " + tagName);

break;
case XmlPullParser.TEXT:
Log.d("debug", "Text inside: " + xpp.getText());

break;
case XmlPullParser.END_TAG:
Log.d("debug", "Ending tag: " + tagName);

break;

}

eventType = xpp.next();
}

}

这是它抛给我的异常:

    03-16 15:38:52.759: W/System.err(28087): org.xmlpull.v1.XmlPullParserException:       Unexpected token (position:TEXT ???????????????8??????...@2:112 in      java.io.InputStreamReader@42604888) 
03-16 15:38:52.759: W/System.err(28087): at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
03-16 15:38:52.759: W/System.err(28087): at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
03-16 15:38:52.759: W/System.err(28087): at xmlparsing.Xmlreader.parse(Xmlreader.java:53)
03-16 15:38:52.759: W/System.err(28087): at com.example.androidexperiments.Lifecycle.onCreate(Lifecycle.java:28)
03-16 15:38:52.759: W/System.err(28087): at android.app.Activity.performCreate(Activity.java:5231)
03-16 15:38:52.759: W/System.err(28087): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-16 15:38:52.759: W/System.err(28087): at android.os.Handler.dispatchMessage(Handler.java:102)
03-16 15:38:52.759: W/System.err(28087): at android.os.Looper.loop(Looper.java:136)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-16 15:38:52.759: W/System.err(28087): at java.lang.reflect.Method.invokeNative(Native Method)
03-16 15:38:52.759: W/System.err(28087): at java.lang.reflect.Method.invoke(Method.java:515)
03-16 15:38:52.759: W/System.err(28087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-16 15:38:52.759: W/System.err(28087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-16 15:38:52.759: W/System.err(28087): at dalvik.system.NativeStart.main(Native Method)

我在谷歌上花了几个小时试图解决它,但我仍然不知道,有人能指出我问题出在哪里吗?

谢谢

最佳答案

不确定您是否仍然坚持这一点。我至少有一个类似的问题。我不会说我已经找到了 解决方案,但我已经找到了一种解决方法,无论如何对我的情况都有帮助。我认为我们有同样问题的原因是因为它在异常中所说的.. @2:112。您可能知道这意味着输入的第 2 行第 112 列。考虑到您的 xml 输入的简洁性,这显然是荒谬的,因为您的第二行输入没有接近 112 列的任何地方。从我的简单输入中,我在异常中看到了类似的虚假位置。

我认为问题可能在于您获取 InputStream 的方式:

InputStream in = ctx.getResources().openRawResource(R.xml.experiment);

如果您花时间将 InputStream 中的输入转换为字符串(可以找到相关代码),您将看到每一行都返回虚假数据;有很多垃圾字符与 xml 数据字符混合在一起。我不知道为什么。也许更精通 Java 的人可以回答这个问题。我怀疑这是因为 xml 文件是作为原始资源打开的(就像它说的那样),它需要用某种编码打开,比如 utf-8 来翻译它正确..?无论如何,当我使用.openRawResource(..) 函数时,它似乎在InputStream 中带有大量垃圾数据,从而阻塞了XmlPullParser。我对此的解决方案是将 .xml 文件从 res/xml/ 文件夹移动到 assets 文件夹。然后我以这种方式获取了 InputStream。

InputStream in = this.getAssets().open("sample.xml");

当我这样做时,我注意到 InputStream 中没有垃圾字符,并且 XmlPullParser 能够毫无异常(exception)地解析我的文件。

希望对您有所帮助,祝您好运。

关于android - XmlPullParser - 意外 token (android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22438491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com