• 締切済み

android HashMapのValueが取得で

当サイトでご援助下さった皆様、ありがとうございました。 皆様のおかげで、なんとか下記のようなコードを組むことができました。 処理内容はcsvファイルを読み込み、Tokenizerで分割してArrayListに入れています。そしてListの値をHashMapにputしているのですが、キーを指定してもvalueを取得できません。 テキストビューでvalueを取得しようとしたのですが(//確認 ■■の部分)、値が返ってきてないようです。 HashMapにはちゃんとセットされているとおもうのですが・・・ 下記がコードです。 たびたびの質問で恐縮ですが、皆様のお知恵をお借りできればと思います。 csvファイル ----------------- "kye1 , 良い" "kye2 , 普通" "kye3 , 悪い" ----------------- public class TestCsvActivity extends Activity { String path = "/sdcard/test.csv"; Spinner mSpinner1; TextView mTextView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ハッシュマップ mapSet(); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { //@Override public void onClick(View v) { //Activity終了 finishActivity(); } }); } private void mapSet(){ try { // create reader InputStream input = new FileInputStream(path); InputStreamReader ireader=new InputStreamReader(input, "UTF-8"); CSVReader reader = new CSVReader(ireader,',','"',0); String[] csv; List<String> lists = new ArrayList<String>(); while ((csv = reader.readNext()) != null) { StringTokenizer tok = new StringTokenizer(csv[0], ","); while (tok.hasMoreTokens()) { String s = tok.nextToken(); //アイテムの追加 lists.add(s); } HashMap<String ,String> map = new HashMap<String ,String>(); for(int i = 0; i < lists.size(); i = i + 2){ String key = lists.get(i); String value = lists.get(i+1); map.put(key,value); } // 確認 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ TextView tv = (TextView)findViewById(R.id.textView1); tv.setText( map.get("key1") ); //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ } } catch (FileNotFoundException e) { Log.e("ERROR", e.toString()); } catch (UnsupportedEncodingException e) { Log.e("ERROR", e.toString()); } catch (IOException e) { Log.e("ERROR", e.toString()); } } private void finishActivity(){ //Activity終了 finish(); return; } }

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

>12-03 00:05:08.250: D/MyApp(723): x={key3=悪い, key2=普通, ?key1=良い} 問題なく読み込みていないと思うのですが・・・ BOM付きのファイルなのではないでしょうか。 >tv.setText( map.get("key1") ); を tv.setText( map.get("key2") ); としても値を取得できないのでしょうか。

tokyo2199
質問者

お礼

お礼が遅くなりました。 ただのスペル間違いでした。 お騒がせして申し訳ありませんでした。

回答No.2

とりあえず、mapの値をログに出してみなよ。 HashMapをログに出力すると、キーと値の組が全部出力されるから。 それを見て入ってるなら取り出し方が悪いんだし、 入ってないなら入れ方が悪いんでしょ。

tokyo2199
質問者

補足

ログには一応下記のように表示されています。 HashMapには問題なくセットされているみたいです。 12-03 00:05:08.250: D/MyApp(723): x={key3=悪い, key2=普通, ?key1=良い} 「 ?kye1 」の?の部分が原因? 問題は取り出し方のようですが、何かお気づきになられましたら、ご助言宜しくお願いします。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

ただのタイポかもしれませんが、 >csvファイル >----------------- >"kye1 , 良い" >"kye2 , 普通" >"kye3 , 悪い" >----------------- >tv.setText( map.get("key1") ); keyの値が違うのではないですか。

tokyo2199
質問者

補足

すいません。 ただのスペルミスです・・・ "kye1 , 良い" (誤) "key1 , 良い" (修正) 試しに両方でコンパイルを試みましたが、 やはりvalueの取得は出来ませんでした・・・