【问题标题】:How to save a coordinate list after app is tombstoned?应用被墓碑化后如何保存坐标列表?
【发布时间】:2026-01-24 00:10:02
【问题描述】:

我有一个保存在地图类中的坐标列表,用于在点之间绘制路线,但我不确定在应用程序关闭然后重新打开时如何保存这些点。

这就是我目前在OnNavigatedTo() 中保存应用程序中的点的方式,只要我不关闭它,点和标记就不会丢失。但是关闭应用程序后如何保存这些坐标呢?

我猜我应该将它们保存在 OnNavigatedFrom 中,但我尝试在此处保存坐标列表,但当我重新打开应用程序时标记不显示。

//save the coordinates to a list
mycoord.Add(new GeoCoordinate(MyGeoPosition.Latitude, MyGeoPosition.Longitude));

if (mycoord.Count == 2)
{
  //call route method when coord list equal to two.
  GetRoute();
}

【问题讨论】:

标签: c# windows-phone-8 coordinates tombstoning


【解决方案1】:

最简单的可定制方法是创建一个自定义对象并使用EZ_Iso.dll将其序列化到手机的存储中

这是一个例子

//Your custom GeoCoord container
[DataContractAttribute]
public class GeoCoordContainer{
  [DataMember]
  public double lat = 0;

  [DataMember]
  public double lon = 0;

  public GeoCoordContainer(Double lat, Double lon){
    this.lat = lat;
    this.lon = lon;
  }
}


//Then in your Navigated from method
  GeoCoordContainer cont = new GeoCoordContainer(MyGeoPosition.Lattitude,MyGeoPosition.Longitued);

  //Now save it to the storage using EZ_Iso
  EZ_Iso.IsolatedStorageAccess.SaveFile("MyLocation",cont);


 //To Retrieve it from storage 
  GeoCoordContainer cont = (GeoCoordContainer)EZ_Iso.IsolatedStorageAccess.GetFile("MyLocation",typeof(GeoCoordContainer));

您可以在这里免费找到 EZ_Iso.dll http://anthonyrussell.info/postpage.php?name=2

【讨论】:

  • 所以我实现了这个,只是想弄清楚如何从容器中检索MyGeoPosition,因为我需要使用它来调用绘图方法..有什么想法吗?
  • 这里很难调试。通过 amr@AnthonyRussell.info 联系我,我们可以进一步讨论。
【解决方案2】:

使用 Tombstone 助手http://tombstonehelper.codeplex.com/

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
 {
this.SaveState(e);  // <- first line
 }

protected override void OnNavigatedTo(NavigationEventArgs e)
 {
this.RestoreState();  // <- second line
 }

【讨论】:

  • 调用 SaveState 后检查页面的 State 属性以查看保存的内容,我怀疑它会保留您的地图,不知道!
  • 在讨论帖中发帖怀疑你会在这里找到答案,看起来很有帮助tombstonehelper.codeplex.com/discussions
【解决方案3】:

你可以创建一些简单的东西,比如:

PhoneApplicationService.Current.State["latitude"] = MyGeoPosition.Latitude;
PhoneApplicationService.Current.State["longitude"] = MyGeoPosition.Longitude;

稍后访问它们:

var lat=PhoneApplicationService.Current.State["latitude"];
var lng=PhoneApplicationService.Current.State["longitude"];

你也可以试试:

private IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
appSettings.Add("latitude", MyGeoPosition.Latitude.ToString());

【讨论】:

  • 我尝试了以下方法,保存:appSettings.Add("latitude", MyGeoPosition.Latitude.ToString()); 并检索:MyGeoPosition.Latitude = (double)appSettings["latitude"]; 只是想弄清楚现在在 OnNavigatedTo() 中检索的位置
  • @BrianJ 你是绝对正确的。添加:` if (appSettings.Contains("Latitude"))` 将有助于检查隔离存储设置中的任何异常。
最近更新 更多