2012-04-20 50 views
0

我正在構建一個Android應用程序,它可以找到附近的wifi熱點。我有一個xml文件,其中包含熱點的GeoLocations,xml文件位於應用程序的res/xml文件夾中。我想在應用程序啓動時下載更新的xml文件。我有兩個問題:下載XML文件,當應用程序啓動並切換到無縫使用

  1. 應該我把xml文件下載到內部存儲或外部存儲,爲什麼?如果我應該將xml文件下載到內部存儲器中,我該怎麼做?
  2. 我希望用戶能夠在應用程序第一次啓動時使用最初嵌入的xml文件,並在下載完成時切換到新下載的xml文件。我如何無縫地實現這一目標?

感謝

+0

您是否考慮過使用SQLite?它比xml文件快得多。您可以先檢查數據庫是否爲空,然後將xml數據放在那裏(如果存在),然後從服務器下載其餘數據並在每次需要時更新它。 – 2012-04-20 10:11:01

回答

1

看看谷歌的網頁關於Android上的數據存儲。 http://developer.android.com/guide/topics/data/data-storage.html

您可以下載一個非常簡單的問題的XML文件。像你這樣的另一個問題是在這裏問:

Download a file with Android, and showing the progress in a 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卡,更新後的數據仍然存在。

相關問題