从内部存储器中解压XML文件

3
我已经将一个XML文件从/assets复制到我的应用程序数据文件夹(data/data/package.name/files/)。我这么做是因为用户将能够修改大量数据,我希望将这些数据保存到内部存储器中,然后在他们重新启动应用程序时再次加载它们。这一切都很好地运作着,使用Root Browser,我可以看到XML文件已经正确地复制到数据目录中。
现在我需要使用LayoutInflater来填充这个XML文件。我该如何访问这个文件?使用XmlResourceParserXmlPullParser

请查看此教程 - http://developer.android.com/intl/zh-CN/guide/topics/data/data-storage.html#filesInternal - Vit Khudenko
问题不是关于写入内部存储的。 - Snailer
该教程中提到了openFileInput()函数。抱歉,我应该更明确地指出这一点。这样你就可以“访问那个文件”了。 - Vit Khudenko
好吧,我想你说得有道理...也许我没有表达清楚。我知道如何“访问”它,但我需要将其膨胀。 - Snailer
抱歉我的英语不好。我认为我们可以通过使用XML标签动态创建视图来实现,但我不确定这对于Android系统是否好用。 - pandu
很抱歉我的英语不好。我认为我们可以通过使用XML标签在动态创建视图。但我不知道对于Android系统是否合适。 - pandu
2个回答

2

您不能使用LayoutInflater来填充该文件。首先,您只能填充布局资源,而不是任意文件。其次,根据您第一段描述中的描述,它本来就不是一个布局文件。

如果要解析任意XML,请使用DOM、SAX或者XmlPullParser


好的,这是一个标准的Android XML文件。当用户点击保存按钮时,我将把他们的输入解析成XML文件。我会查看那些类并回复..谢谢! - Snailer
好的,我已经解决了(我玩了一会儿天际 :P)。我放弃了将文件存储为典型的Android XML布局,现在我正在使用XmlPullParser加载它。我想“不行”就足够作为答案了 ;) - Snailer
@Snailer:是的,从任意来源膨胀布局文件会很不错。经过一些努力,你甚至可能能够为此提供一个解决方案。但这绝对不是开箱即用的。另外,我很抱歉假设您的原始文件实际上不是布局——从您所写的内容来看,它更像是普通的XML编码数据。 - CommonsWare

1

来自Android视图API

目前无法在运行时使用LayoutInflater和XmlPullParser处理普通XML文件。

解决方案可能是预处理XML文件。您必须以与Android SDK在构建时相同的方式压缩XML文件:

视图膨胀严重依赖于在构建时完成的XML文件的预处理

我猜您将不得不调用XmlPullParser.setInput来加载预处理的XML,然后将XmlPullParser传递给View.inflate。我希望即使对于不在APK中的内容,也可以做到这种事情。

我非常感兴趣您能找到的任何解决方案。如果您找到或创建了原型,请告诉我!这将是为我的开源应用程序创建插件架构的决定性步骤。


我也在思考同样的问题。我想为我的Android应用程序提供多个主题。主应用程序可以使用插件应用程序中加载的布局。所以你有任何解决方案吗?或者如果你找到了或仍在寻找解决方案,有任何建议、演示或原型吗? - Smeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接