0

我正在构建一个查找附近 wifi 热点的 android 应用程序。我有一个包含热点地理位置的 xml 文件,该 xml 文件位于应用程序的 res/xml 文件夹中。我想在应用程序启动时下载更新的 xml 文件。我有两个问题:

  1. 我应该将 xml 文件下载到内部存储还是外部存储中,为什么?如果我应该将 xml 文件下载到内部存储中,我该怎么做?
  2. 我希望用户能够在应用程序首次启动时使用最初嵌入的 xml 文件,并在下载完成时切换到新下载的 xml 文件。我怎样才能无缝地实现这一目标?

谢谢

4

1 回答 1

1

查看 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 卡,更新的数据仍然存在。

于 2012-04-20T10:11:35.460 回答