Androidの開発の出鼻をくじかれた話から解決まで
昨日開発環境を導入して,意気揚々と開発を始めたところ,どうにも本や解説サイトと同じように行かず,下のようなエラーが出ました.
▼仮想Androidでのプログラム実行の結果
このプログラムはボタンをタップするとToastが表示される単純なものでしたが,エラーの原因がどうにもわからず,相当悩みました.
いろいろ試してみた結果,発生条件は
・Xmlに登録したGUI部品をイベントリスナーとして登録する
これでした.
例えばテキストの内容を変更しようとした時に,javaファイルから内容の変更を行おうとした場合にエラーが出ました.
しかし,Xmlファイルの”Android:text”から直接変更した場合や,javaからToastを表示するなど,Xml単体,java単体の動作ではちゃんと動く…….
これはEclipseでもAndroidStudioでも同じでした.
先人の声に導かれEclipseでサンプルプログラムを動作させてみたところ動く!
動くじゃん!!!
ここまで,JDK等の開発環境を導入しなおしたりと2,3時間のロス…….
とにかく問題はソースの方にあるとわかったので,エラー表示から原因を探ってみることに.
”問題が発生したため,(アプリ名)を終了します”
というエラーについて調べると,変数にNullを入れたまま出力したり,存在しないIDを呼び出すと出てくるらしい.
変数は使ってないので,可能性があるとすればID登録と呼び出しがうまく行っていない方なのでは?
速攻でソースを確認し,ID登録の関係を見るとしっかりと登録している.
そこでふとプロジェクト内のXmlファイルが確認したところ
▼プロジェクトファイル内
Xmlファイルが2つ自動生成されている!!
手元の本を確認したところ,自動生成されるXmlファイルは1つ.
これに気づいたら解決はすぐでした.
原因はやはりIDの呼び出しミスでした.
自動生成されるXmlファイルは”activity_main”と”fragment_main”の2つ.
そのうちタブに表示されるのは”fragment_main”の方になっていました.
ここが曲者.
javaファイルの,レイアウトとして”activity_main”を呼び出しているクラスの中で”fragment_main”で作成したGUI部品をイベントリスナーとして登録すると,起動の時に「そんなIDねーよ出なおせ!」とエラーを吐いていたようです.
とにかくjavaファイル内の”fragment_main”関連のクラスをすべて削除し,”activity_main”の方にGUI部品を配置,ID登録をしたところ無事に起動することが出来ました.
長かった…….
先人に話を聞いたところ,Android4.4実装からこの仕様になったようで.
まだAndroid4.4がリリースされていない時の本やWebページを参考にしていたため気付かなかったようです.
すごく時間を無駄にした気もしますが,問題を自力で解決してアプリが起動した時の快感はやばかったです.