【问题标题】:ArrayList Serializable AndroidArrayList 可序列化 Android
【发布时间】:2013-10-22 15:22:25
【问题描述】:

我正在尝试使用intent.putExtra() 传递ArrayList<Polygon>

我得到 IOException 写入可序列化对象 (name=Polygon.polygon)。

Polygon 是我创建的一个类,并且在这个类上实现了 Serializable。

Intent intent = new Intent(this, Main.class);
intent.putExtra("polygons", (ArrayList<Polygon>)this.polygons);

startActivity(intent);

Polygon 类有一个ArrayList&lt;Point&gt; 来保存一个带有一些getter 和setter 的多边形的点列表,仅此而已。我在 Polygon 类上实现了 Serializable,但我从上面的代码中得到了那个异常。

public class Polygon implements Serializable{

    ArrayList<Point> polygon;

    public Polygon(){ 
        polygon = new ArrayList();
    }

    public int getSize(){
        return polygon.size();
    }

    public ArrayList<Point> getPointArray(){
        return this.polygon;
    }

    public void addPoint(int x, int y, int mapWidth, int mapHeight, int canvasWidth, int canvasHeight){
        //going to scale up here
        float scaleX = mapWidth / canvasWidth;
        float scaleY = mapHeight / canvasHeight;

        polygon.add(new Point((int)(x*scaleX),(int)(y*scaleY)));
    }

    public void removePoint(int index){
        polygon.remove(index);
    }
}

有什么想法吗?

【问题讨论】:

  • 如果不发布实现(代码),您可能不会获得太多有用的帮助。
  • 您好,我已经添加了一些代码。
  • 好吧,当我这么说时,我指的是来自处理序列化的Polygon 类的代码。 但是,既然你发布了,this.polygons 是什么,你为什么要把它转换成ArrayList&lt;Polygon&gt;?我以为它已经是那种类型了。
  • 我不需要强制转换,我只是想看看它是否有所作为:) this.polygons 被定义为 ArrayList 多边形。你对处理序列化是什么意思,我认为实现 Serializable 就足以发送这个字段了?如果有帮助,我已经添加了上面的 Polygon 类。

标签: android serializable


【解决方案1】:

如果您在 Polygon 类中使用的是 android.graphics.Point,那么您应该使用 Parcelable,因为 Point 实现了 Parcelable 而不是 Serializable。

如果使用序列化,您需要在您的 Manifest 中添加以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多