今天在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();
這是本人犯的低價錯誤,對于大神沒有什么參考價值,但我確確實實被它耍了一回,所以有必要在這里分享一下。