2

達成したいことから始めます

目的

ソフトウェアは for ループで XML データを解析します。データを処理する for ループは 50 まで続きます (50 の異なる結果が得られるため)。私が最初にしたことは、doInBackgroundメソッドが XML データ全体を解析し、それを TextViews に保存して表示することでした。しかし今、データが読み込まれる限り表示されるスプラッシュスクリーンを追加したいと思いました。

XML ファイルは、他の通常の XML ファイルと同じように構築されるため、for ループを実行すると、キーは常に同じですが、値は異なります。

アプローチ

私がすでに行ったことは、多次元配列を作成することでしたが、残念ながら文字列をインデックスとして使用することはできません。そのためのマップです。これが私のアプローチでした

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

さて、それから私はマップでそれを試しました。しかし、マップの問題は、新しいキーが再び来ると、以前のキーと値のペアが上書きされることでした。

そこで、文字列コレクションで 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すると、メソッドは新しいインテントを開始し、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")ソースデータのすべての値が含まれているためだと思います。そこで、すべてのデータを文字列配列に保存しようとしました。しかし、これはうまくいきませんでしたが、その理由はわかりません。エクリプスが教えてくれるType mismatch: cannot convert from String to String[]

何かアドバイス?私はこの問題を解決したいと思っています。

4

4 に答える 4

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 に答える