Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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
Java 无法将XmlPullAttributes强制转换为XmlBlockParser_Java_Android_Xml_Xml Parsing - Fatal编程技术网

Java 无法将XmlPullAttributes强制转换为XmlBlockParser

Java 无法将XmlPullAttributes强制转换为XmlBlockParser,java,android,xml,xml-parsing,Java,Android,Xml,Xml Parsing,这是由上述问题产生的错误 我设法将XML文件保存到assets文件夹中并加载(我甚至可以浏览解析器的不同部分并从中生成输出),但当我尝试将XmlPullParser传递到LayoutInflater时,我得到了上述错误。不过,我不完全清楚为什么会发生这种情况 下面是我正在使用的活动(其中涉及解析Xml文件的部分)以及Xml文件(称为activity_main.sv)和logcat 忽略xml文件的文件扩展名。我只是简单地将其重命名,因为IDE在包含方面存在分歧。如果xml文件保存在res/lay

这是由上述问题产生的错误

我设法将XML文件保存到assets文件夹中并加载(我甚至可以浏览解析器的不同部分并从中生成输出),但当我尝试将
XmlPullParser
传递到
LayoutInflater
时,我得到了上述错误。不过,我不完全清楚为什么会发生这种情况

下面是我正在使用的活动(其中涉及解析Xml文件的部分)以及Xml文件(称为activity_main.sv)和logcat

忽略xml文件的文件扩展名。我只是简单地将其重命名,因为IDE在包含方面存在分歧。如果xml文件保存在res/layouts文件夹中,它就可以正常工作(我知道,因为我直接从res/layouts文件夹中复制了它)

而我的基本relativelayout保存为“activity_main.sv”

编辑 添加factory.setValidating(true)语句后。我现在有一个不同的错误

11-04 14:59:52.682: W/System.err(4664): org.xmlpull.v1.XmlPullParserException: unsupported feature: http://xmlpull.org/v1/doc/features.html#validation (position:START_DOCUMENT null@1:1) 
11-04 14:59:52.684: W/System.err(4664):     at org.kxml2.io.KXmlParser.setFeature(KXmlParser.java:2100)
11-04 14:59:52.684: W/System.err(4664):     at org.xmlpull.v1.XmlPullParserFactory.newPullParser(XmlPullParserFactory.java:135)
11-04 14:59:52.684: W/System.err(4664):     at pro.bladebeat.intentplayground.MainActivity.onCreate(MainActivity.java:36)
11-04 14:59:52.684: W/System.err(4664):     at android.app.Activity.performCreate(Activity.java:5933)
11-04 14:59:52.684: W/System.err(4664):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
11-04 14:59:52.684: W/System.err(4664):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-04 14:59:52.684: W/System.err(4664):     at android.os.Looper.loop(Looper.java:135)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.main(ActivityThread.java:5221)
11-04 14:59:52.684: W/System.err(4664):     at java.lang.reflect.Method.invoke(Native Method)
11-04 14:59:52.684: W/System.err(4664):     at java.lang.reflect.Method.invoke(Method.java:372)
11-04 14:59:52.684: W/System.err(4664):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-04 14:59:52.684: W/System.err(4664):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
仿效工厂

factory.setValidating(true);

看看这个:


出于性能原因,视图膨胀在很大程度上依赖于在构建时完成的XML文件的预处理。因此,目前不可能在运行时将LayoutInflater与XmlPullParser一起用于普通XML文件。

我知道这是一个老问题,但我想为那些想使用此方法或最近面临此问题的人提供一个答案


我研究了大约五个小时的android源代码
XmlBlock
是一个私有类,
XmlBlock.Parser
位于其中,因此只能由
android.content.res
中的类访问。如果将此方法与从方法
Resources.getXml(id)
获取的xml一起使用,它将不会出现任何问题(!),因为getXml调用一个函数,该函数使用为应用程序内部资源设计的特殊算法。所以,不要浪费时间让它工作(
XmlResourceParser
或类似的东西不能被转换到
XmlBlock.Parser

我现在正在工作,但我回家后会尝试一下。我发誓,如果是这么简单的一行,我会重新编写代码,并添加行factory.setValidating(true)。我现在又犯了一个错误。我在我的帖子中添加了新的错误抱歉,在查看文档后,我发现:[link](,android.view.ViewGroup))对于性能很重要,视图膨胀严重依赖于在构建时对XML文件进行预处理。因此,目前不可能在运行时在普通XML文件上使用LayoutInflater和XmlPullParser。他们有代码,但你不能使用它。谢谢你的思考。如果你把它作为一个答案,我想我必须接受它。我知道这是一个被接受的答案。但是你有没有关于如何工作的背景?我假设我可以手动解析每个视图,但这将是一个巨大的痛苦,不知道发生了什么。你是否有任何关于该如何工作的背景链接?那么你的建议是什么呢?你不能使用android的默认布局充气器,但你可以自定义实现(这会有点复杂!)。更多细节:当充气者想要获得样式化的属性时,问题就出现了。编译之后,它们以某种方式进行了编码以进行优化,解析器无法使用它们的名称。如果您提供了与之等效的方法,您将能够解析xml。我建议你看一下源代码,但不知怎的,谷歌已经截获了通货膨胀是如何运作的,比如用appcompat版本取代了TextView。这是如何工作的?@androiddeveloper我说问题在于获取样式,而不是视图的名称。这使得通过标记名创建视图成为可能。再看看:我明白了。谢谢你一个想法:我从某人那里得到了一个解决方案,关于做一件类似的事情:加载一个二进制XML以形成VectorDrawable,而你写的同样的问题也存在于此。解决方法是使用反射。也许它也能帮助你:
10-24 19:36:55.273: W/EGL_emulation(4724): eglSurfaceAttrib not implemented
10-24 19:36:55.273: W/OpenGLRenderer(4724): Failed to set EGL_SWAP_BEHAVIOR on surface 0xa34192a0, error=EGL_SUCCESS
10-24 19:47:15.252: W/System.err(8074): java.lang.ClassCastException: android.util.XmlPullAttributes cannot be cast to 

android.content.res.XmlBlock$Parser
10-24 19:47:15.253: W/System.err(8074):     at android.content.res.Resources$Theme.obtainStyledAttributes

(Resources.java:1483)
10-24 19:47:15.253: W/System.err(8074):     at android.content.Context.obtainStyledAttributes(Context.java:460)
10-24 19:47:15.253: W/System.err(8074):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:708)
10-24 19:47:15.253: W/System.err(8074):     at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
10-24 19:47:15.253: W/System.err(8074):     at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
10-24 19:47:15.253: W/System.err(8074):     at pro.bladebeat.intentplayground.MainActivity.onCreate

(MainActivity.java:73)
10-24 19:47:15.253: W/System.err(8074):     at android.app.Activity.performCreate(Activity.java:5933)
10-24 19:47:15.253: W/System.err(8074):     at android.app.Instrumentation.callActivityOnCreate

(Instrumentation.java:1105)
10-24 19:47:15.253: W/System.err(8074):     at android.app.ActivityThread.performLaunchActivity

(ActivityThread.java:2251)
10-24 19:47:15.253: W/System.err(8074):     at android.app.ActivityThread.handleLaunchActivity

(ActivityThread.java:2360)
10-24 19:47:15.253: W/System.err(8074):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
10-24 19:47:15.253: W/System.err(8074):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
10-24 19:47:15.253: W/System.err(8074):     at android.os.Handler.dispatchMessage(Handler.java:102)
10-24 19:47:15.253: W/System.err(8074):     at android.os.Looper.loop(Looper.java:135)
10-24 19:47:15.253: W/System.err(8074):     at android.app.ActivityThread.main(ActivityThread.java:5221)
10-24 19:47:15.253: W/System.err(8074):     at java.lang.reflect.Method.invoke(Native Method)
10-24 19:47:15.253: W/System.err(8074):     at java.lang.reflect.Method.invoke(Method.java:372)
10-24 19:47:15.253: W/System.err(8074):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run

(ZygoteInit.java:899)
10-24 19:47:15.253: W/System.err(8074):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
10-24 19:47:15.257: D/AppLog(8074): Well fuck me it didnt work
11-04 14:59:52.682: W/System.err(4664): org.xmlpull.v1.XmlPullParserException: unsupported feature: http://xmlpull.org/v1/doc/features.html#validation (position:START_DOCUMENT null@1:1) 
11-04 14:59:52.684: W/System.err(4664):     at org.kxml2.io.KXmlParser.setFeature(KXmlParser.java:2100)
11-04 14:59:52.684: W/System.err(4664):     at org.xmlpull.v1.XmlPullParserFactory.newPullParser(XmlPullParserFactory.java:135)
11-04 14:59:52.684: W/System.err(4664):     at pro.bladebeat.intentplayground.MainActivity.onCreate(MainActivity.java:36)
11-04 14:59:52.684: W/System.err(4664):     at android.app.Activity.performCreate(Activity.java:5933)
11-04 14:59:52.684: W/System.err(4664):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
11-04 14:59:52.684: W/System.err(4664):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-04 14:59:52.684: W/System.err(4664):     at android.os.Looper.loop(Looper.java:135)
11-04 14:59:52.684: W/System.err(4664):     at android.app.ActivityThread.main(ActivityThread.java:5221)
11-04 14:59:52.684: W/System.err(4664):     at java.lang.reflect.Method.invoke(Native Method)
11-04 14:59:52.684: W/System.err(4664):     at java.lang.reflect.Method.invoke(Method.java:372)
11-04 14:59:52.684: W/System.err(4664):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-04 14:59:52.684: W/System.err(4664):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
factory.setValidating(true);