2

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

意图

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

XML 文件是像任何其他普通 XML 文件一样构建的,所以当我通过 for 循环时,键总是相同的,但值不同。

方法

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

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

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

所以我想我会使用带有字符串集合的 HashMap。我是这样处理的;首先我创建了 HashMap

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

然后我将每个键的数据放入 HashMap 中。

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

这就是我在for循环中所做的

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

然后,当完成时,onPostExecute-method 开始一个新的意图并传递 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 cannot be cast to java.lang.String" in this line

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

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

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

4

4 回答 4

5

你有一个错字:

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

应该:

HashMap<String, Collection<String>> hashMap = (HashMap<String, Collection<String>>)intent.getSerializableExtra("hashMap");
于 2013-10-09T12:56:17.247 回答
1

@Eng.Fouad 的答案是正确的,你的选角有误。

您可能会考虑使用 MultiMap 而不是集合映射:

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

于 2013-10-09T12:58:16.250 回答
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
于 2013-10-09T12:59:58.823 回答
0

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

尝试这个:

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

希望这可以帮助 :)

于 2013-10-09T12:59:57.867 回答