【问题标题】: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;
      
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-26
        • 2018-04-25
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        • 2014-04-11
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多