2011-09-26 35 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

相关问题