2012年2月4日土曜日

findViewByIdはsetContentViewの後で

前回のHelloActivityのソースに、テキストを表示したくて追加したら、実行時エラーが出た。

02-04 01:03:38.007: E/AndroidRuntime(4179): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.helloactivity/com.example.android.helloactivity.HelloActivity}: java.lang.NullPointerException
LogCatにエラーはぬるぽしか理解できない。
DDMSの使い方も勉強しなければ。
public class HelloActivity extends Activity {
    public HelloActivity() {
    }
    /**
     * Called with the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tview = (TextView)this.findViewById(R.id.text);
        tview.setText( System.getProperty("file.encoding") );

        // Set the layout for this activity.  You can find it
        // in res/layout/hello_activity.xml
        setContentView(R.layout.hello_activity);
    }
}
"import android.widget.TextView;"も追加してある。
setContentView実行後でないと、Activityが実体化されずnullが返る。
Activityの仕様みたいでDialog等でも起きる。
参考資料(Kazzzの日記さん:AlertDialog#findViewByIdはshow以降じゃないと使えない)

今回判ったこと。
  1. 何をするにも先にsetContentViewする。
  2. findViewByIdでViewを取得できる。
  3. Viewは代入時にキャストする。

このエントリーはもちろんSyntaxHighlighterを試したくて書いた。

参考
ななし's Programming: SyntaxHighlighterのグーグルBloggerでの使い方
次回以降の宿題
よしけんActivity: Syntax Highlighter 3.0でLogcatのハイライト表示を自作する手順

0 件のコメント:

コメントを投稿