我将从我想要实现的目标开始
意图
该软件在 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[]
有什么建议吗?我很想解决这个问题。