onResume()上的java.lang.NullPointerException

时间:2018-04-22 20:25:25

标签: java android nullpointerexception

我有片段A和片段B,在片段A上我有一个输入搜索框,当我打开片段时,它显示了预期的软键盘。切换片段时有时会发生NullPointerException。我无法重现错误,但日志文件表明onResume()函数发生错误。下面是我在onResume()上使用的代码,我得到java.lang.NullPointerException的原因是什么?

@Override
public void onResume() {
    super.onResume();
    getActivity().setTitle(R.string.app_name);
    if (getActivity().getWindow().getCurrentFocus() == searchbox) {
        searchbox.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.showSoftInput(searchbox, InputMethodManager.SHOW_IMPLICIT);
                }
            }
        }, 300);
    }
}

编辑: 这是logcat:

java.lang.NullPointerException: 
  at com.myapp.fragments.MyMain$7.run (MyMain.java:258)
  at android.os.Handler.handleCallback (Handler.java:815)
  at android.os.Handler.dispatchMessage (Handler.java:104)
  at android.os.Looper.loop (Looper.java:207)
  at android.app.ActivityThread.main (ActivityThread.java:5811)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:907)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:768)

3 个答案:

答案 0 :(得分:2)

在run方法中你有:

InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
如果片段在getActivity()毫秒后未附加到活动,则

null可能为300

答案 1 :(得分:1)

空指针异常意味着您正在尝试使用尚未初始化的变量。所以在你的onResume方法中,检查所有变量。确保他们在活动破坏中幸存下来。因为许多变量不会在onResume中恢复。 您需要找出哪个变量给出了空指针异常,然后在onResume方法中初始化该变量。

您可以在onResume方法的每个代码行上使用try catch方法来确定哪个代码行有错误。在catch方法中,您可以将错误打印到控制台,如下所示

try{
//1st code line
}catch{ System.out.println("1st line gives the error")
}

答案 2 :(得分:1)

是的我同意磁铁。这应该可以解决你的问题。

try{
            //code line 1
        }catch(Exception e){
            Log.i(TAG, "method: "+e.getMessage());
        }

在每一行上尝试这一点 另一种方法是调试项目并在onResume方法中添加断点。这可能会更有帮助。