2012-10-8
android: ユーザーの入力処理があるアプリケーションで、結果が期待と異なる
症状:
例えばボタンを設定していて、ユーザーが押したボタンでは 100 が返るはずなのに、なぜか 0 が返ってきたというようなとき。あるいはヌルポ (NullPointerException)が出てコンパイルできない場合。
解決法:
1. OnClickListener の後に処理がないか?
ユーザーの入力を促す処理のあとに、続けて処理がある場合、ドロイド君はせっかちなのでユーザーの入力を待たず、次の処理を行ってしまいます。
こんなときは、待っていてほしい部分の処理を別アクティビティとして別ファイル化、intent で繋げておくのが定石ですかな。alertdialog の挙動がおかしい参照。
2. 参照がスコープ内に入っているか。
ドロイド君は形式にうるさいので、整数なら int 型、文字列なら String 型云々なんてことは言うに及ばず、基本一つのカッコで括られた{ }内しか参照できません。
{ }の外にまで参照したい場合は、手っ取り早いのは冒頭で static とか final とかで宣言しておくという方法が、スコープ外で宣言するとメモリを余計に食うだのどうだのということもあるかもしれないが、一番安易。
ほかにもいろいろ方法があるけれども、とりあえずその筋で調べてみて下さい。