运行点列表会保存到共享首选项中,以后应该检索。所有数据,除了PointF类型列表和两个参数“start”&正确检索“end”(两种类型的PointF)。每个点都被检索为PointF(0,0),而实际数据是PointF(139000.0,455000.0)
结果:
runpoint save: PointF(139000.0, 455000.0)
runpoint load: PointF(0.0, 0.0)
要保存运行点,我使用JsonConvert.SerializeObject。我发现在其他问题上,解决方案是提供JsonSerializerSettings并将TypeNameHandling设置为All。然而,这并没有对结果产生影响。
我提供了保存和加载代码。您可以在下面找到我的TrackSpec类的蓝图:
//Saving
TrackSpec activeTrack = runView.getTrack();
ISharedPreferences sharedPrefs = PreferenceManager.GetDefaultSharedPreferences(this);
ISharedPreferencesEditor editor = sharedPrefs.Edit();
for (int i = 0; i < activeTrack.path.Count; i++)
{
Console.WriteLine("runpoint save: " + activeTrack.path[i].point);
}
JsonSerializerSettings serializeSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
string toSave = JsonConvert.SerializeObject(activeTrack, Formatting.Indented, serializeSettings);
editor.PutString(routeNameInput, toSave);
editor.Apply();
//Load
ISharedPreferences sharedPrefs = PreferenceManager.GetDefaultSharedPreferences(this);
string json = sharedPrefs.GetString(routeName, "default");
TrackSpec trackObj = JsonConvert.DeserializeObject<TrackSpec>(json, serializeSettings);
for (int i = 0; i < trackObj.path.Count; i++)
{
Console.WriteLine("runpoint load: " + trackObj.path[i].point);
}
runView.setTrack(trackObj);
TrackSpec:
public class TrackSpec
{
public string routeName;
public List<TimeGeoPoint> path;
public float distance;
public string pace;
public float speed;
public PointF start;
public PointF end;
public DateTime date;
public TrackSpec(string routeName, List<TimeGeoPoint> path, float distance, string pace, float speed, PointF start, PointF end, DateTime date)
{
this.routeName = routeName;
this.path = path;
this.distance = distance;
this.pace = pace;
this.speed = speed;
this.start = start;
this.end = end;
this.date = date;
}
}