【发布时间】:2015-01-24 17:45:59
【问题描述】:
来自 Logcat:
11-26 06:43:40.643: E/AndroidRuntime(1163): FATAL EXCEPTION: AsyncTask #1
...
11-26 06:43:40.643: E/AndroidRuntime(1163): java.lang.RuntimeException: An error occured while executing doInBackground()
...
11-26 06:43:40.643: E/AndroidRuntime(1163): Caused by: java.lang.NullPointerException
...
11-26 06:43:40.643: E/AndroidRuntime(1163): at com.example.mymobiletest.SearchTask.doInBackground(SearchTask.java:134)
第 134 行是ed = (EditText) mainActivity.findViewById(R.id.mainSearchActivity_editTextSearch);。现在这一行的执行表明mainActivity(它是传递给这个AsyncTask的构造函数的主要活动的一个实例)不是null。那么在这一行还有什么可能是null,这会导致NullPointerException?
@Override
protected String doInBackground(Void... voidParameters) {
EditText ed=null;
if (mainActivity!=null) {
ed = (EditText) mainActivity.findViewById(R.id.mainSearchActivity_editTextSearch);
} else {
return "mainActivity is the Null culprit.";
}
编辑:- 我确实认为,因为我没有更改 doInBackground() 中的 UI(但仅从 UI 中读取) ,所以这应该不是问题。但是我仍然在onPreExecute() 中尝试了这个,因为onPreExecute 是在 UI 线程中执行的,但我仍然在同一条语句中得到 NPE。
@Override
protected void onPreExecute() {
EditText ed=null;
if (mainActivity!=null) {
ed = (EditText) mainActivity.findViewById(R.id.mainSearchActivity_editTextSearch);//******NPE
} else {
Log.i(TAG, "mainActivity is the Null culprit.");
}
searchQuery = ed.getText().toString();
}
【问题讨论】:
-
@MD
ed在这行之前是null,但是我们有这行来分配ed一个View,所以为什么会出现异常! -
mainActivity同步了吗? -
@Zarah 你不应该在 doInBackground() 中使用 ui 做任何事情,考虑使用 onProgress()
-
尝试打印一个简单的
mainActivity.toString()并检查您是否获得了 NPE。同样正如 grub 所说,您不应该更改doInBackground上的 UI。 -
他已经对
mainActivity进行了空检查,因此它不能为此抛出 NPE,并且他没有更改 doInBackground 中的用户界面
标签: java android android-asynctask nullpointerexception