【问题标题】:Serialize or save PolylineOptions in Android在 Android 中序列化或保存 PolylineOptions
【发布时间】:2013-03-19 14:36:07
【问题描述】:
在我的 Android 应用程序中,我已经将一些字符串保存到 SharedPreferences 并使用字符串序列化一个 ArrayList,以便保存这些数据并可用于将来的目的。即使应用程序关闭。
一分钟前,我发现我还需要保存我的 PolylineOptions 以供将来使用。 PolylineOptions 包含一些坐标,用于在我的地图上绘制一条具有颜色和宽度的线。
我发现 PolylineOptions 不像字符串那样可序列化。有没有办法“保存”我的 PolylineOptions,还是我需要保存 PolylineOptions 的设置并在启动时创建 PolylineOptions?
所以真正的问题是。如何序列化不可序列化的对象?
【问题讨论】:
标签:
java
serialization
sharedpreferences
polyline
android-maps-v2
【解决方案1】:
一种选择是创建 PolylineOptions 类的可序列化版本。
例如:
public class Blammy implements Serializable
{
public Blammy(final PolylineOptions polylineOptions)
{
//retrieve all values and store in Blammy class members.
}
public PolylineOptions generatePolylineOptions()
{
PolylineOptions returnValue = new PolylineOptions();
// set all polyline options values.
return returnValue;
}
}
如果 PolylineOptions 对象不是最终的,您可以使用 Serializable 类(一个简单的包装器)对其进行扩展并实现
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
派生类中的方法。
【解决方案2】:
public class polyLineData implements Serializable {
PolylineOptions polylineOptions;
public polyLineData(){;}
public polyLineData(PolylineOptions polylineOptions) {
this.polylineOptions = polylineOptions;
}
public static void writeData(Context c, polyLineData pd)
{
Gson gson=new Gson();
SharedPreferences.Editor spEditor=c.getSharedPreferences("RecordedPoints",MODE_PRIVATE).edit();
String uniqueID = UUID.randomUUID().toString();
spEditor.putString(uniqueID,gson.toJson(pd)).apply();
}
public static ArrayList<PolylineOptions> getData(Context c)
{
Gson gson=new Gson();
ArrayList<PolylineOptions> data=new ArrayList<>();
SharedPreferences sp=c.getSharedPreferences("RecordedPoints",MODE_PRIVATE);
Map<String,?> mp=sp.getAll();
for(Map.Entry<String,?> entry : mp.entrySet()){
String json=entry.getValue().toString();
polyLineData pd=gson.fromJson(json,polyLineData.class);
data.add(pd.polylineOptions);
}
return data;
}
}