2011/08/27

Inflating例外はコンストラクト失敗でも出る

かなり昔作ったアプリがあるので、ちょっと書き直していた。

AbsoluteLayoutを使っていたので、別のに置き換えようかとね。
Viewを指定した位置に配置する方法がどこかのサイトにあったので、置き換えは成功した。
(サイトがどこだったか、忘れてしまった。。。)

それが先週の話。
今週もちょっといじろうと思って動かしたのだが、起動しただけでエラーになって立ち上がらない。
onCreate()のsetContentView(R.layout.main)を実行した中で例外が出るのだ。
Inflatingなんとか、という例外のようだ。
Binary XMLがうんたらかんたら、とも出てきた。

このアプリは、LinearLayoutをextendsして、自前のLayoutを作っている。
ImageViewもextendsして、自前のViewにしている。
特徴はそれくらいだ。



はて、先週までは動いていたのに。。。
しかしよく考えると、最後にちょっと変更だけしていたようなのだ。

検索すると、レイアウトのxmlに書いた名前を書き間違えてるとか、そのclassがpublicになってないとか、そういうのが出てきた。
でも、今回はそういうことはない。

さっぱりわからないので、extendsしたLayoutクラスのコンストラクタが呼ばれるのかをブレークポイントで見てみた。
呼ばれている。
呼ばれているが、実行しようとすると例外が出る。

あ、メンバ変数(フィールドっていうのかな)に代入する際、nullオブジェクトのメンバ関数(メソッド、なのかな)を呼び出してる。。。


つまり、Layoutを作ろうとしてコンストラクタを呼び出したんだけど、nullオブジェクトのメソッド呼び出しによって例外が発生し、そのせいでレイアウトが作れなかったのでInflatingなんとか例外が出た、と。

ってことは、例外時のスタックトレースを全部見ていたら原因がわかったのかな。。。
なんだかよくわからない例外の時は、トレースの先頭だけしか見ていなかったけど、もうちょっと先まで見るようにせねば。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。