Android 在应用程序启动时下载XML文件,并切换到无缝使用

Android 在应用程序启动时下载XML文件,并切换到无缝使用,android,download,android-xml,Android,Download,Android Xml,我正在构建一个android应用程序,可以找到附近的wifi热点。我有一个包含热点地理位置的xml文件,该xml文件位于应用程序的res/xml文件夹中。我想在应用程序启动时下载一个更新的xml文件。我有两个问题: 我应该将xml文件下载到内部存储还是外部存储?为什么?如果我应该将xml文件下载到内部存储中,我该怎么做 我希望用户能够在应用程序首次启动时使用最初嵌入的xml文件,并在下载完成时切换到新下载的xml文件。我如何才能无缝地实现这一点 谢谢看看谷歌关于安卓系统数据存储的页面。 您可以

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

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

  • 谢谢

    看看谷歌关于安卓系统数据存储的页面。

    您可以非常简单地下载XML文件。另一个像你这样的问题在这里被问到:

    在该示例中,文件将保存到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.      
            }
        }
    
    e、 g

    你的问题有很多答案,所以我不能给出一个快速准确的答案


    是的,我建议将XML数据保存到内部存储器中。XML文件的大小应该足够小,不会造成问题,从逻辑上讲,它与应用程序的内部功能相关。用户不应对此进行篡改。另外,内部存储是不可移动的,所以在用户改变SD卡的情况下,更新的数据仍然存在。它比xml文件快得多。您可以首先检查数据库是否为空,如果为空,则将xml数据放在其中,然后从服务器下载其余数据,并在需要时随时更新。
    XMLUser xmlStuff = new XMLUser(PATH_TO_RES_FILE);
    //... do something with it
    //... update found
    xmlStuff.updateLocations(PATH_TO_UPDATED_XML);