変にハマったので、メモ。
サイコロのアプリを作ってて、サイコロの数を画面に出したかった。
// Dice Count
TextView diceCountTextView = (TextView) convertView.findViewById(R.id.dice_count);
diceCountTextView.setText(diceRecord.getDiceCount());
そして、テストも書いた。
TextView diceCountTextView = (TextView) act.findViewById(R.id.dice_count);
assertThat(diceCountTextView.getText().toString(), is(6));
実行したら、
android.content.res.Resources$NotFoundException: unknown resource 6
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:272)
at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:62)
at android.content.res.AssetManager.getResourceText(AssetManager.java)
at android.content.res.Resources.getText(Resources.java:235)
at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:369)
at android.content.res.Resources.getText(Resources.java)
at android.widget.TextView.setText(TextView.java:3844)
....more
ちょっと、悩んだんだけど、「unknown resource 6」って、期待値は6……ん?数は正しい?
TextViewのsetTextメソッドについて、改めてjavadocを見てみると
setText
http://developer.android.com/reference/android/widget/TextView.html#setText
パラメータの型がintだと、値をリソースIDのkeyと考えてリソースを探しに行っちゃうってことかーーっ!
// Dice Count
TextView diceCountTextView = (TextView) convertView.findViewById(R.id.dice_count);
diceCountTextView.setText(diceRecord.getDiceCount().toString());
グリーンになったよ。
textのsetter/getterってつい、軽視しちゃうメソッドだ。暗黙キャストとか、地雷。
そもそも、数字をカンマや単位でフォーマットして表示すれば、こういったことで悩むのはないし、気をつけろよ、自分orz
判ってしまえば、たいしたことない、ちょっとしたことなんだけどね。