今天在Android中碰到了這樣一個問題,其實應該很少人會碰到,因爲只有像我這種奇葩纔會犯這種錯誤。
但既然解決了,我就想在這裏跟大家分享一下,畢竟它困擾了我一個白天啊。。。不多說了,看下面。。。
其實問題很簡單,就是Caused By : java.lang.NullPointerException.
上面就是我在用EditText 的時候它給我提示的錯誤類型。
爲了簡便,截取了部分代碼如下,這就是問題的根源所在。
super.onCreate(savedInstanceState);
final EditText et = (EditText)findViewById(R.id.editTextId);
String str = et.getText().toString().trim();
setContentView(R.layout.main);
咋一看,沒什麼不對啊。就是因爲我是新手,所以沒看出端倪來。然後拼命的報錯,拼命的上網查。
而網上卻沒有這個情況。。。
ADT Log 裏面顯示的出錯位置就是String str = et.getText().toString().trim();這一行。
可它真的沒什麼不對啊,如果此時你呵呵了。那麼你已經看出來了。
對,就是setContentView(R.layout.main);這句話位置放錯了,它應該放在引用的資源文件的前面,在這裏也就是
final EditText et = (EditText)findViewById(R.id.editTextId);這句話的前面。因爲R.id.editTextId這個Id
引用到了R.layout.main這個Xml文件裏面的對EditText的定義<EditText android:id="@+id/editTextId"
而在final EditText et = (EditText)findViewById(R.id.editTextId)句話之前我們並沒有把R.layout.main這個Xml
文件放到我們的Context中來。我們可以觀察一下findViewById()方法,會發現原來此方法中的R.id.editTextId是從當前
Activity的主佈局文件xml中獲取。而R.layout.main一定要先於findViewById(R.id.editTextId)在程序中聲明。
那麼這樣改就對了:
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText et = (EditText)findViewById(R.id.editTextId);
String str = et.getText().toString().trim();
setContentView(R.layout.main);
這是本人犯的低價錯誤,對於大神沒有什麼參考價值,但我確確實實被它耍了一回,所以有必要在這裏分享一下。