Mus*_*abe 2 java arrays android hashmap
我将从我想要实现的目标开始
意向
该软件以for循环方式解析XML-Data.处理数据的for循环将持续到50(因为我得到50个不同的结果).我最初做的是,doInBackground-method解析整个XML数据并将其保存到TextViews中并显示它.但现在我想添加一个启动画面,只要数据加载就会显示.
XML文件与任何其他普通的XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同.
途径
我已经做的是创建一个多维数组,但不幸的是你不能使用字符串作为索引.这就是地图的用途.这是我的方法
stringArray[i]["source"] = sourceString;
Run Code Online (Sandbox Code Playgroud)
那么,我用地图试了一下.但是地图的问题是,当新密钥再次出现时,它只会覆盖以前的键值对.
所以我发现我会使用带有字符串集合的HashMap.我像这样处理它; 首先我创建了HashMap
public HashMap <String, Collection<String>> hashMap = new HashMap<String, Collection<String>>();
Run Code Online (Sandbox Code Playgroud)
然后我将数据放在HashMap中为每个键.
hashMap.put("source" , new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)
这就是我在for循环中所做的
hashMap.get("source").add(new String(((Node) sourceList.item(0)).getNodeValue()));
Run Code Online (Sandbox Code Playgroud)
然后,完成后,onPostExecute-method启动一个新的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();
}
Run Code Online (Sandbox Code Playgroud)
在我的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);
Run Code Online (Sandbox Code Playgroud)
但是这会导致ClassCastException:在这一行中,"ArrayList不能转换为java.lang.String"
source.setText("source: " + hashMap.get("source"));
我想这是因为hashMap.get("source")包含了源数据的所有值.所以我试图将所有数据保存在字符串数组中.但这不起作用,但我不知道为什么.Eclipse告诉我Type mismatch: cannot convert from String to String[]
有什么建议?我很想解决这个问题.
你有一个错字:
HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");
Run Code Online (Sandbox Code Playgroud)
应该:
HashMap<String, Collection<String>> hashMap = (HashMap<String, Collection<String>>)intent.getSerializableExtra("hashMap");
Run Code Online (Sandbox Code Playgroud)