【问题标题】:Avoid that value gets 'overwritten' in arraylist避免该值在 arraylist 中被“覆盖”
【发布时间】:2015-03-01 06:31:59
【问题描述】:

我正在尝试将一些值保存在 arraylist 中,但不知何故,它们都被覆盖,最终在 arraylist (200) 中只有 1 个值。

final String[] titles = new String[urls.length];

    for (int i = 0; i < titles.length; i++){
        ArrayList<Integer> valuesList = new ArrayList<Integer>();
            valuesList.add(page.getTopicCount()); // returns 4 values (50,100,150,200)
                System.out.println("Element: " + valuesList.toString()); 
                    // returns only value 200
    }   

代码page.getTopicCount() 在 1 行 (50 100 150 200) 中返回 4 个值,只有最后一个 (200) 被添加到数组列表中,但我试图找到一种方法将它们全部保存 4 个。

我有什么选择? (SharedPreferences,保存到文件,我是否必须建立另一个循环)?

我已经做了一些研究并最终访问了this 页面,但我不知道这是否可行。

Ps:这4个值是不断变化的,因此无法将它们添加为:

valuesList.add("50");
valuesList.add("100");
etc..

编辑: getTopicCount 是 Saxparser 类的一部分,参见下面的代码 sn-p:

public void endElement(final String uri, final String localName, final String qName)
        throws SAXException {
//

} else if (localName.equals("topiccount")) {
        in_topiccount = true;
        sb = new StringBuilder();
    }
//

  else if (localName.equals("topiccount")) {
        in_topiccount = false;
        forumPage.setTopicCount(Integer.parseInt(sb.toString())); //returns 50 100 150 200
        sb = null;
    }
// 
}

【问题讨论】:

  • 什么page.getTopicCount() 和返回类型?

标签: android arrays arraylist sharedpreferences


【解决方案1】:

在 for 循环中,您正在初始化 valuesList ArrayList。因此,每次迭代,您都会创建一个新的 ArrayList 并向其中添加一个元素,然后将其丢弃。结果,最后你只有一个对你创建的最后一个 ArrayList 的引用,它只能有 200 个。

大概你想做的是这样的:

 ArrayList<Integer> valuesList = new ArrayList<Integer>();
 for (int i = 0; i < titles.length; i++){
            valuesList.add(page.getTopicCount()); // returns 4 values (50,100,150,200)
  }    
  System.out.println("Element: " + valuesList.toString()); 

编辑:本质上,创建一次 ArrayList,然后在 for 循环中将元素插入其中。

【讨论】:

  • 嗨 La Dee Dah,已经尝试过同样的问题,仅添加了 200 个,其余的被覆盖了。
  • 你确定 title.length 和 page.getTopicCount() 返回你想要的吗? ideone.com/sNIeSH 展示了如果这两个不是一些疯狂的值,这段代码将如何工作。
  • 这对我来说意味着问题是双重的; 1:你的 for 循环不正确。 2:如果,如您所说,修复 for 循环仍然给您不正确的输出,那么标题或 page.getTopicCount() 的行为不符合您的要求。
  • 嗨titles.length = 4,所以它循环了4次,我想要的值也是4。getTopicCount返回这4个值,但单笔画1。它是一种“流”,当所有 4 个页面都被解析时结束。
  • 对不起,您说“page.getTopicCount() 在 1 行中返回 4 个值”。 'in 1 line' 是什么意思?如果我在开始时只执行一次 System.out.println(page.getTopicCount())) ,输出是什么? '50',对吧?
猜你喜欢
  • 2017-03-27
  • 2021-09-05
  • 2017-11-28
  • 2021-03-02
  • 2022-11-02
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多