相关文章推荐
无邪的铁板烧  ·  Android ...·  5 月前    · 
霸气的领结  ·  MySQL ...·  1 年前    · 
酒量大的煎鸡蛋  ·  linux - Why is the ...·  1 年前    · 
喝醉的电脑桌  ·  The WebSocket session ...·  1 年前    · 
登录

安卓: NullPointerException,这里什么东西是空的?

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Solace 修改于2014-11-26
  • 该问题已被编辑
  • 提问者: Solace
  • 提问时间: 2014-11-26 11:51

从日志里说:

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();
    }
浏览 6 关注 0 得票数 2
  • 得票数为Stack Overflow原文数据
原文
回答于2014-11-26
得票数 1

由于doInBackground()方法运行在与主线程不同的线程上,因此不应该访问doInBackground()方法中的UI元素。您应该在OnProgress()方法或OnPostExcecute()方法中访问UI元素。

回答于2014-11-26
得票数 0

尝尝这个

    @Override 
    protected void onPreExecute() {
        EditText ed=null;
        if (mainActivity!=null) {
            ed = (EditText) mainActivity.findViewById(R.id.mainSearchActivity_editTextSearch);//******NPE