我将从我想要实现的目标开始
意图
该软件在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[]
有什么建议吗?我很想解决这个问题。
答案 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而不是集合图:
答案 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");
希望这会有所帮助:)