【问题标题】:How to save a Vector<Vector<PointF>> into a ArrayList?如何将 Vector<Vector<PointF>> 保存到 ArrayList 中?
【发布时间】:2013-01-02 22:54:53
【问题描述】:

我有一个无法解决的简单问题。我有一个 Vector&lt;Vector&lt;PointF&gt;&gt; 对象,我想将它保存到 ArrayList 中。我试过这样做:

ArrayList<Vector<Vector<PointF>>> my_arraylist = new ArrayList<Vector<Vector<PointF>>>();

并像这样保存:

 public void setMyArrayList(Vector<Vector<PointF>> polyLines) {
        my_arraylist.add(polyLines);
        this.my_arraylist = my_arraylist;
 }

当我尝试获取 my_arraylist 中的特定元素时,我总是获取 my_arraylist 中的最后一个元素。有没有特定的方法可以将&lt;Vector&lt;Vector&lt;PointF&gt;&gt; 保存到 ArrayList 中?

【问题讨论】:

  • 你为什么要这样做 this.my_arraylist = my_arraylist; 这毫无意义。你能在你访问元素的地方添加代码吗?
  • 感谢您的回复。首先,我检索保存元素的整个 ArrayList: public ArrayList>> getMyArrayList() { return my_arrayList;我访问这样的元素: ArrayList>> returned_arrayList = getMyArrayList();整数索引 = 0; Vector> my_data = returned_arrayList.get(index);

标签: java android vector arraylist vector-graphics


【解决方案1】:

我只看到你的初始化有一点问题

ArrayList<Vector<Vector<PointF>>> my_arraylist = new ArrayList<Vector<Vector<PointF>>>();

,并删除了一些不必要的代码:

public void setMyArrayList(Vector<Vector<PointF>> polyLines) {
    my_arraylist.add(polyLines);
}

我看不出有什么原因,为什么这不起作用。

【讨论】:

  • 对不起,那是我的错,我初始化正确但仍然无法工作。
  • 我很确定问题不在代码中,您向我们展示了。在您从 ArrayList 读取的代码中调用 setMyArrayList(..) 或在代码中存在问题。
  • 你是对的。看起来 Arraylist 正在使用错误的值进行更新。我会检查我的设置方法。
  • 我想我现在知道这个问题了。存储在 Arraylist 中的 Vector> 看起来像一系列 android.graphics.pointf 值。一旦我存储一个新的,由于 android.graphics.pointf 值反映,它们将所有 arraylist 元素替换为完全相同的 android.graphics.pointf 值。
【解决方案2】:

所以你总是只得到你添加到 ArrayList 的最新元素?这表明在向 ArrayList 添加值之前,您要么 clear() ArrayList,要么创建一个全新的空 ArrayList。

您的问题不在您向我们展示的代码中。

尝试添加调试输出,如下所示。如果每次调用 setMyArrayList 时写入 System.err 的对象引用都发生了变化,则表明您在某处创建了一个新的 ArrayList 并因此丢弃了您在此处添加的所有旧值。如果有日志框架,请使用它。

public void setMyArrayList(Vector<Vector<PointF>> polyLines) {
    System.err.println("Appending to ArrayList " + my_arraylist + ", size " + my_arraylist.size());
    my_arraylist.add(polyLines);
    this.my_arraylist = my_arraylist;
}

【讨论】:

  • 嗨 Torben,当我在您的评论中进行调试时,我发现问题在于折线中的值。由于 polyLines 是 Vector>,因此其中的 pointF 引用是以一系列 android.graphics.pointf 值的形式在画布上最新绘制的引用。我正在尝试找到一种将它们存储为对象的方法。
【解决方案3】:

我解决了。我必须创建一个Object 并通过克隆Vector 数组来存储它:

Object temp = new Object();

temp =  polyLines.clone();

并将临时值存储在我的Arraylist&lt;Object&gt;. 中,每当我需要使用arraylist 中的特定元素时,将其转换回Vector&lt;Vector&lt;PointF&gt;&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2011-02-22
    • 1970-01-01
    • 2019-07-08
    相关资源
    最近更新 更多