相同的密钥 - 使用HashMap的不同值

时间:2013-10-09 12:51:47

标签: java android arrays hashmap

我将从我想要实现的目标开始

意图

该软件在for循环中解析XML-Data。处理数据的for循环将持续到50(因为我得到50个不同的结果)。我最初做的是,doInBackground - 方法解析整个XML数据并将其保存到TextViews并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。

XML-File的构建方式与任何其他普通的XML文件一样,因此当我通过for循环时,键总是相同的,但值不同。

途径

我已经做的是创建一个多维数组,但不幸的是你不能使用字符串作为索引。这就是地图的用途。这是我的方法

stringArray[i]["source"] = sourceString;

好吧,然后我用地图试了一下。但是地图的问题是,当新密钥再次出现时,它只会覆盖以前的键值对。

所以我想通了我会使用HashMap和String Collection。我像这样处理它; 首先我创建了HashMap

public HashMap <String, Collection<String>> hashMap = new HashMap<String, Collection<String>>();

然后我将数据放在HashMap中为每个键。

hashMap.put("source"        , new ArrayList<String>());

这就是我在for-loop中所做的

hashMap.get("source").add(new String(((Node) sourceList.item(0)).getNodeValue()));

然后,完成后,onPostExecute - 方法启动一个新的intent并传递hashMap。

protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    Intent i = new Intent(SplashScreen.this, MainActivity.class);
    i.putExtra("hashMap", hashMap);
    startActivity(i);
    finish();
}

在我的MainActivity中,我这样做是为了获取数据

Intent intent = getIntent();
HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");
rankingDate = new TextView(this);
rankingDate.setText("RankingDate: " + hashMap.get("rankingDate"));
layout.addView(rankingDate);

但是这会导致ClassCastException:'ArrayList无法在此行中强制转换为java.lang.String

source.setText("source: " + hashMap.get("source"));

我想这是因为hashMap.get("source")包含源数据的所有值。所以我试图将所有数据保存在字符串数组中。但这不起作用,但我不知道为什么。 Eclipse告诉我Type mismatch: cannot convert from String to String[]

有什么建议吗?我很想解决这个问题。

4 个答案:

答案 0 :(得分:5)

你有一个错字:

HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");

应该是:

HashMap<String, Collection<String>> hashMap = (HashMap<String, Collection<String>>)intent.getSerializableExtra("hashMap");

答案 1 :(得分:1)

@ Eng.Fouad回答是正确的,你在投射中有错误。

您可以考虑使用MultiMap而不是集合图:

http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap.html

答案 2 :(得分:1)

使用地图列表。 您可以调用list.get(index).get(“source”)并稍后获取结果。

半伪代码:

List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>

foreach(entry in document)
  map = new HashMap<String,String>();
  foreach(xml in entry)
   map.put(xml,xml.value)
  end
  list.put(index++,map)
end

答案 3 :(得分:0)

您在主要活动中错误地投射了哈希图。

试试这个:

HashMap<String, Collection<String>> hashMap = (HashMap<String, Collection<String>>)intent.getSerializableExtra("hashMap");

希望这会有所帮助:)