Ошибка Android Back Key - PullRequest
       6

Ошибка Android Back Key

1 голос
/ 20 ноября 2011

Каждый раз, когда я нажимаю клавишу «Назад», мое приложение вылетает. Я пытался по-разному, и они оба сбой, бросая исключение NullPointerException .... какие-нибудь идеи?

Путь 1:

public boolean onKeyDown(int keyCode, KeyEvent event) {
  // Check if the key event was the BACK key and if there's history
  if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
      myWebView.goBack();
      return true;
  }
  // If it wasn't the BACK key or there's no web page history, bubble up to the default
  // system behavior (probably exit the activity)
  return super.onKeyDown(keyCode, event);
}

Способ 2:

    public void onBackPressed() {
      myWebView.goBack();
      return;
}

Трассировка стека:

11-19 20:13:12.425: E/AndroidRuntime(1963): FATAL EXCEPTION: main
11-19 20:13:12.425: E/AndroidRuntime(1963): java.lang.NullPointerException
11-19 20:13:12.425: E/AndroidRuntime(1963):     at com.meanwhileinwv.android.MNWVShow.onBackPressed(MNWVShow.java:27)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.app.Activity.onKeyUp(Activity.java:1983)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.view.KeyEvent.dispatch(KeyEvent.java:1518)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.app.Activity.dispatchKeyEvent(Activity.java:2163)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1747)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2702)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2677)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1965)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.os.Looper.loop(Looper.java:143)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at android.app.ActivityThread.main(ActivityThread.java:4263)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at java.lang.reflect.Method.invokeNative(Native Method)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at java.lang.reflect.Method.invoke(Method.java:507)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-19 20:13:12.425: E/AndroidRuntime(1963):     at dalvik.system.NativeStart.main(Native Method)

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Единственный способ получить трассировку стека, которую вы получаете из кода, которым вы поделились, - это для myWebView быть null при вызове myWebView.goBack(). Чтобы доказать это себе, измените ваш onBackPressed():

public void onBackPressed() {
    if (myWebView != null) {
        myWebView.goBack();
    }
}

Исключение должно исчезнуть. (Хотя, очевидно, вы все равно не получите никакого обратного поведения.)

Возможные причины:

  • myWebView не является переменной-членом в вашем классе. Возможно, вы объявили и задали его другим методом, что означает, что он не входит в область действия onBackPressed.
  • myWebView не является фактическим именем переменной, которая относится к вашему WebView
  • myWebView раньше ссылался на ваш WebView, но в какой-то момент снова был установлен на null
  • Код, который, по вашему мнению, указывает myWebView на ваш WebView, фактически устанавливает null. Например, вызов findViewById, который на самом деле не находит WebView, поскольку вы указали неправильный идентификатор, вернет null.
  • и т.д.

Если вы все еще застряли, опубликуйте код, где объявляется myWebView и где он назначен.

1 голос
/ 20 ноября 2011

Единственная общая точка в этом коде - это myWebView. Вы гарантировали, что это не нуль?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...