2011-11-03 4 views
0

Je suis en train de mettre à jour mon application et maintenant je reçois NullPointerException lorsque j'appuie sur le bouton de retour. Voici mon activité principale:NullPointerException sur le bouton Précédent Appuyez sur

image http://www.appinfluence.com/wp-content/uploads/2011/11/screenshot1.png image2 http://www.appinfluence.com/wp-content/uploads/2011/11/screenshot2.png

En cliquant la musique de ma deuxième activité est lancée et il a un WebView niché à l'intérieur. J'ai des problèmes pour obtenir le bouton de retour pour fonctionner correctement. Je m'attends à ce qu'il revienne dans le navigateur jusqu'à la première page et ensuite à la première activité une fois qu'il ne pourra plus revenir en arrière. Voici mon code et mon fichier journal.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
     mWebView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 


11-03 16:41:14.386: W/dalvikvm(282): threadid=1: thread exiting with uncaught exception  (group=0x4001d800) 
11-03 16:41:14.486: E/AndroidRuntime(282): FATAL EXCEPTION: main 
11-03 16:41:14.486: E/AndroidRuntime(282): java.lang.NullPointerException 
11-03 16:41:14.486: E/AndroidRuntime(282): at  com.appinfluence.musicpromotion.WebViewActivity.onKeyDown(WebViewActivity.java:315) 
11-03 16:41:14.486: E/AndroidRuntime(282): at  android.view.KeyEvent.dispatch(KeyEvent.java:1037) 
11-03 16:41:14.486: E/AndroidRuntime(282): at  android.app.Activity.dispatchKeyEvent(Activity.java:2068) 
11-03 16:41:14.486: E/AndroidRuntime(282): at  com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:16 43) 
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471) 
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441) 
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735) 
11-03 16:41:14.486: E/AndroidRuntime(282): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-03 16:41:14.486: E/AndroidRuntime(282): at android.os.Looper.loop(Looper.java:123) 
11-03 16:41:14.486: E/AndroidRuntime(282): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-03 16:41:14.486: E/AndroidRuntime(282): at java.lang.reflect.Method.invokeNative(Native Method) 
11-03 16:41:14.486: E/AndroidRuntime(282): at java.lang.reflect.Method.invoke(Method.java:521) 
11-03 16:41:14.486: E/AndroidRuntime(282): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-03 16:41:14.486: E/AndroidRuntime(282): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-03 16:41:14.486: E/AndroidRuntime(282): at dalvik.system.NativeStart.main(Native Method) 

Vous avez raison, mon webview est nul, MAIS POURQUOI?

WebView mWebView; 
WebView mWebView = (WebView) findViewById(R.id.webview); 

changé à ce (OOPS!):

WebView mWebView; 
mWebView = (WebView) findViewById(R.id.webview); 

Répondre

1

Je devine que c'est votre mWebView qui est nulle. Avez-vous vérifié qu'il est initialisé lorsque cette méthode est appelée? Vous pouvez juste essayer de jeter un test rapide avant d'appeler mWebView.canGoBack() et imprimer les résultats dans le journal comme ceci:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(mWebView == null){ 
     log.d("My Tag", "Webview is null on KeyCode: " + String.valueOf(keyCode)); 
    } 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
     mWebView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

Eh bien, cela fonctionne (affichage des pages) et j'ai parcouru les pages afin qu'il devrait être en mesure de revenir en arrière? –

+0

Testez-le :). 'if (mWebView! = null) {mWebView.goBack(); } ' – Ricky

+0

doivent également tester avant le canGoBack – FunkTheMonk

0

Si l'on suppose com.appinfluence.musicpromotion.WebViewActivity.onKeyDown est la méthode onKeyDown vous avez publié, mWebView est null pour certaines raisons.

0

Assurez-vous que votre variable n'est pas nulle. Je ne peux pas dire exactement sur quelle ligne il est en train de mourir, mais je suppose qu'il obtient le pointeur nul sur "mWebView.canGoBack()" dans la condition IF.

0

Enroulez le code si quelque chose comme ceci:

if(mWebView!=NULL){ your if } 

et de voir ce qui se passe si rien que mWebView est nul, vous pouvez également imprimer un certain débogage.

Questions connexes