2011-09-26 90 views
5

我創建了一個應用程序,用戶可以在其中使用疊加層在Google地圖上添加各種標記。我希望應用程序在用戶創建時保存疊加層,以便稍後重新打開應用程序時,標記將仍然存在。
目前,只要應用程序重新打開,創建的標記就會消失。我搜索了互聯網,並沒有清楚地瞭解如何將我的標記/疊加層保存爲脫機供以後使用。如何在Android應用程序中保存添加的Google地圖覆蓋圖?

回答

2

這只是一個想法,但你可以保存在數據庫中的標誌,當你重新打開你的地圖只是查詢數據庫,並把它再次在地圖上...

1

你應該使用一些持久性存儲。 SQLite可能是這裏最好的選擇。疊加層有他們的lat和lng。把它們和你需要的任何數據一起拿出來放在SQLite數據庫中。然後在Activity上,從數據庫中獲取點並在地圖上顯示它們。

3

如前所述,您需要使用some persistent storage。也許,數據庫在你的特定情況下會是多餘的(如果你只需要保存一堆經緯度對),並且Shared Preferences可以滿足你的需求。如果你很少需要讀取/存儲這些數據,然後把JSONArray作爲字符串來共享偏好將是最簡單(在閱讀和提取數據計算)解決方案:

SharedPreferences.Editor editor = getSharedPreferences("name", 0).edit(); 
    JSONArray jsonArr = new JSONArray(); 
    JSONObject json; 
    for (int i = 0; i < user_markers.size(); i++) { // here I assume that user_markers is a list where you store markers added by user 
     json = new JSONObject(); 
     json.put("lat", user_markers.get(i).getLat()); 
     json.put("long", user_markers.get(i).getLong()); 
     jsonArr.put(json); 
    } 
    editor.putString("markers", jsonArr.toString()); 
    editor.commit(); 

如果您需要讀取/存儲這數據更頻繁一些,那麼你可以分配ID /索引來分離SharedPreferences的值,但這可能需要更復雜的提取方法。例如:

SharedPreferences.Editor editor = getSharedPreferences("name", 0).edit(); 
    int id; 
    for (int i = 0; i < user_markers.size(); i++) { // here I assume that user_markers is a list where you store markers added by user 
     id = user_markers.get(i).getId(); // some Id here 
     // or simply id = i; 
     editor.putString("markers_lat_" + id, user_markers.get(i).getLat()); 
     editor.putString("markers_long_" + id, user_markers.get(i).getLong()); 
    } 
    editor.commit(); 

畢竟,你應該考慮使用數據庫,如果你打算存儲數據或結構複雜的大數據量。

+0

這是我也有試過在我的應用程序仍然工作GR8 :)這招的最佳方式 –

0

使用SQLite數據庫來保存用戶數據。它們很簡單,對於大量的數據,它們比SharedPreferences更好。

More Info

Example

相關問題