我正在构建一个查找附近 wifi 热点的 android 应用程序。我有一个包含热点地理位置的 xml 文件,该 xml 文件位于应用程序的 res/xml 文件夹中。我想在应用程序启动时下载更新的 xml 文件。我有两个问题:
- 我应该将 xml 文件下载到内部存储还是外部存储中,为什么?如果我应该将 xml 文件下载到内部存储中,我该怎么做?
- 我希望用户能够在应用程序首次启动时使用最初嵌入的 xml 文件,并在下载完成时切换到新下载的 xml 文件。我怎样才能无缝地实现这一目标?
谢谢
我正在构建一个查找附近 wifi 热点的 android 应用程序。我有一个包含热点地理位置的 xml 文件,该 xml 文件位于应用程序的 res/xml 文件夹中。我想在应用程序启动时下载更新的 xml 文件。我有两个问题:
谢谢
查看 Google 关于 Android 数据存储的页面。 http://developer.android.com/guide/topics/data/data-storage.html
您可以通过非常简单的方式下载 XML 文件。另一个像你这样的问题在这里被问到:
使用 Android 下载文件,并在 ProgressDialog 中显示进度
在该示例中,文件被保存到 SD 卡中。请务必更改指向 SD 卡的 OutputStream,使其指向私有存储,如参考页面所述:
FileOutputStream fos = openFileOutput(your_xml_filename, Context.MODE_PRIVATE);
为了尽可能简单地切换到新的 XML,我将所有与 XML 相关的功能封装在一个类中,并提供一种简单的方法来切换到新的 XML。例如,
class XMLUser {
private Location someLocation;
public XMLUser(String pathToXml) {
readxmlAndSetLocations(pathToXml);
}
}
然后在需要更改 XML 文件时初始化一个新的 XMLUser 对象。像这样:
XMLUser xmlStuff = new XMLUser(PATH_TO_RES_FILE);
//... do something with it
//... update found
XMLUser xmlStuff = new XMLUser(PATH_TO_PRIVATEDATA_FILE);
另一种方法是使用相同的对象并仅更新 XML 文件中的位置:
class XMLUser {
private Location someLocation;
public void updateLocations(String pathToXml) {
//Read your xml here and update the locations accordingly.
}
}
例如
XMLUser xmlStuff = new XMLUser(PATH_TO_RES_FILE);
//... do something with it
//... update found
xmlStuff.updateLocations(PATH_TO_UPDATED_XML);
您的问题可以提供多种答案,因此我无法给出快速准确的答案。
是的,我确实建议将 XML 数据保存到内部存储中。XML 文件的大小应该足够小,不会造成问题,并且从逻辑上讲,它与应用程序的内部功能有关。用户不应篡改。另外,内部存储是不可移动的,所以如果用户更换了 SD 卡,更新的数据仍然存在。