findViewById()でNull Pointer Exception エラー
随分と前につまづいていたところからひとつ。
MainActivity.java
public class MainActivity extends Activity { EditText et = (EditText)findViewById(R.id.edit_text); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } ...
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
上記のプログラムではNull Pointer Exceptionが発生します。
理由は簡単なものです。
EditText et = (EditText)findViewById(R.id.edit_text);
ここでfindViewById()をしてしまうと
このEditTextがあるactivity_main.xmlがsetContentView()される前に呼び出されているのでエラーとなります。
つまり、findViewById()はsetContentView()より後に記述しなければいけません。
MainActivity.java
public class MainActivity extends Activity { EditText et = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText)findViewById(R.id.edit_text); } ...
これでエラーは発生しなくなります。