fre*_*aks 16 resources android load
我从资产目录加载xml文件时遇到问题.使用相同的代码行(只是更改路径)我得到不同的结果(ok或NPE /文件已损坏)文件"castle1.tmx"(它是一个xml文件)被复制到两个位置:
使用这一行,它的工作原理:
XmlResourceParser xrp = ctx.getAssets().openXmlResourceParser("res/xml/castle1.tmx");
Run Code Online (Sandbox Code Playgroud)
虽然这条线不是:
XmlResourceParser xrp = ctx.getAssets().openXmlResourceParser("assets/level/castle1.tmx");
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
04-05 21:46:40.940: WARN/ResourceType(29056): Bad XML block: header size 28024 or total size 1702240364 is larger than data size 70441
04-05 21:46:40.940: ERROR/TestParser(29056): Unable to read resource file
04-05 21:46:40.940: WARN/System.err(29056): java.io.FileNotFoundException: Corrupt XML binary file
04-05 21:46:40.940: WARN/System.err(29056): at android.content.res.AssetManager.openXmlAssetNative(Native Method)
04-05 21:46:40.944: WARN/System.err(29056): at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:485)
04-05 21:46:40.944: WARN/System.err(29056): at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:453)
04-05 21:46:40.944: WARN/System.err(29056): at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:442)
04-05 21:46:40.944: WARN/System.err(29056): at game.test.MapLoader.<init>(MapLoader.java:73)
Run Code Online (Sandbox Code Playgroud)
文件在两种情况下都可以找到...这只是我似乎无法使用该方法从资产目录中读取它.
任何想法如何从资源目录加载我的xml文件?
TNX
GrA*_*And 18
在res/
文件夹中,所有xml文件都是预编译的,而在assets/
文件夹中则不是.因此,您不能使用openXmlResourceParser()
非预编译资源.而是open()
通过使用和读取文件InputStream
.
fre*_*aks 16
我成功从资源目录(assets/level/castle1.tmx)加载和解析我的xml文件
这就是我所做的:
取而代之的:
XmlResourceParser xrp = ctx.getResources().getXml(ctx.getResources().getIdentifier(name, "xml", ctx.getPackageName()));
Run Code Online (Sandbox Code Playgroud)
这样:
InputStream istr = context.getAssets().open("level/"+name+".tmx");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
xrp = factory.newPullParser();
xrp.setInput(istr, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
那么我所要做的就是编辑一些getAttributeIntValue()行:
int a = xrp.getAttributeIntValue(null, "width",0));
Run Code Online (Sandbox Code Playgroud)
进入这个:
int a = Integer.parseInt(xrp.getAttributeValue(null, "width"));
Run Code Online (Sandbox Code Playgroud)
所有其余的工作没有修改:) ..这个类是解析平铺的xml /地图文件,以建立我的游戏关卡.以前,它使用res /但我想尝试将所有文件放入资产/.所以现在它的工作:)
谢谢您的帮助