Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XmlPullParser-意外令牌(android)_Android_Xml_Xmlpullparser - Fatal编程技术网

XmlPullParser-意外令牌(android)

XmlPullParser-意外令牌(android),android,xml,xmlpullparser,Android,Xml,Xmlpullparser,我正在开发一个应用程序,它将读取我在res/xml/experience.xml中存储的xml,但当我尝试解析它时,它会给我一个xmlPullParserException 这是我真正简单的xml文件: <?xml version="1.0" encoding="utf-8"?> <message>Hello</message> 这是它带给我的一个例外: 03-16 15:38:52.759: W/System.err(28087):

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

这是我真正简单的xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <message>Hello</message>
这是它带给我的一个例外:

    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)
我花了几个小时在谷歌上试图解决这个问题,但我仍然不知道,有人能告诉我问题出在哪里吗


谢谢

我认为错误可能来自您设置为
XmlPullParser
的编码

此行不正确:
xpp.setInput(在“UTF_8”中)。它应该是:
xpp.setInput(在“UTF-8”中)。如果没有帮助,您甚至可以尝试通过以下方式更改这两行:

InputStream in = ctx.getResources().openRawResource(R.xml.experiment);
xpp.setInput(in, null);

我不确定你是否还在这上面。我至少也有类似的问题。我不会说我已经找到了解决办法,但我已经找到了一个解决办法,不管怎样,它对我的处境很有帮助。我认为我们有同样问题的原因是因为它在例外中所说的@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能够毫无例外地解析我的文件


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

我也有同样的错误,我刚刚从doInBackground()方法中删除了附加字符串! 它是:

现在:

@Override
protected String doInBackground(String... strings) {
  Log.d(TAG, "doInBackground: starts with: " + strings[0]);
  String rssFeed = downloadXML(strings[0]);
  return rssFeed;
}

在我的例子中,删除xml文件中前导的3个字节(BOM=0xEF BB BF)后,错误消失了。

哪个是Xmlreader.java文件的第53行?这一行
eventType=xpp.next()这也没用。它仍然让我犯同样的错误,看起来也是我的答案。我自己也遇到了这个问题。谢谢你终于拿到了。
@Override
protected String doInBackground(String... strings) {
  Log.d(TAG, "doInBackground: starts with: " + strings[0]);
  String rssFeed = downloadXML(strings[0]);
  return "test:\n "+rssFeed;
}
@Override
protected String doInBackground(String... strings) {
  Log.d(TAG, "doInBackground: starts with: " + strings[0]);
  String rssFeed = downloadXML(strings[0]);
  return rssFeed;
}