簡體   English   中英

Android Webview onKeyDown強制關閉應用程序

[英]Android Webview onKeyDown force closes app

基本上,我有一個用於大學項目的簡單Webview應用程序,而且我幾乎對編碼一無所知。 Webview可以正常工作,並仍按預期將其他鏈接加載到我的應用程序中,但后退按鈕不會導航到上一頁,它只是強制關閉該應用程序,並彈出一條消息,提示“很遺憾,'Broadbent Studios已停止'。 如果我只是擺脫了后退按鈕的代碼,則該應用程序可以正常運行,但我無法像在網絡瀏覽器中那樣使用后退按鈕,那樣會更好。

我嘗試過這里使用的各種方法,但是都沒有奏效,這是最好的方法,因為eclipse不會給出任何錯誤,但是顯然有些錯誤。

 package com.broadbentstudios; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.webkit.WebView; import android.webkit.WebViewClient; import android.view.KeyEvent; public class BroadbentStudios extends Activity { final Activity activity = this; WebView WebView; @SuppressLint("SetJavaScriptEnabled") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main); WebView webView = (WebView) findViewById(R.id.mainWebView); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setUseWideViewPort(true); webView.loadUrl("http://www.bsstudios.portfoliobox.me"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && WebView.canGoBack()) { WebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } } 

Logcat條目

 03-06 15:20:14.757: W/UnimplementedWebViewApi(32191): Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown(WebView.java:2178) 03-06 15:20:14.757: E/InputEventSender(32191): Exception dispatching finished signal. 03-06 15:20:14.757: E/MessageQueue-JNI(32191): Exception in MessageQueue callback: handleReceiveCallback 03-06 15:20:14.757: E/MessageQueue-JNI(32191): java.lang.NullPointerException 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at com.broadbentstudios.BroadbentStudios.onKeyDown(BroadbentStudios.java:42) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.app.Activity.dispatchKeyEvent(Activity.java:2423) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2017) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3848) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3822) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3554) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3714) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2021) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1715) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1706) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1998) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.os.MessageQueue.nativePollOnce(Native Method) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.os.MessageQueue.next(MessageQueue.java:138) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.os.Looper.loop(Looper.java:123) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at android.app.ActivityThread.main(ActivityThread.java:5146) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at java.lang.reflect.Method.invokeNative(Native Method) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at java.lang.reflect.Method.invoke(Method.java:515) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 03-06 15:20:14.757: E/MessageQueue-JNI(32191): at dalvik.system.NativeStart.main(Native Method) 03-06 15:20:14.757: D/AndroidRuntime(32191): Shutting down VM 03-06 15:20:14.757: W/dalvikvm(32191): threadid=1: thread exiting with uncaught exception (group=0x415f9db8) 03-06 15:20:14.767: E/AndroidRuntime(32191): FATAL EXCEPTION: main 03-06 15:20:14.767: E/AndroidRuntime(32191): Process: com.broadbentstudios, PID: 32191 03-06 15:20:14.767: E/AndroidRuntime(32191): java.lang.NullPointerException 03-06 15:20:14.767: E/AndroidRuntime(32191): at com.broadbentstudios.BroadbentStudios.onKeyDown(BroadbentStudios.java:42) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.app.Activity.dispatchKeyEvent(Activity.java:2423) 03-06 15:20:14.767: E/AndroidRuntime(32191): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2017) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3848) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3822) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3554) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3714) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2021) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1715) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1706) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1998) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.os.MessageQueue.nativePollOnce(Native Method) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.os.MessageQueue.next(MessageQueue.java:138) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.os.Looper.loop(Looper.java:123) 03-06 15:20:14.767: E/AndroidRuntime(32191): at android.app.ActivityThread.main(ActivityThread.java:5146) 03-06 15:20:14.767: E/AndroidRuntime(32191): at java.lang.reflect.Method.invokeNative(Native Method) 03-06 15:20:14.767: E/AndroidRuntime(32191): at java.lang.reflect.Method.invoke(Method.java:515) 03-06 15:20:14.767: E/AndroidRuntime(32191): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 03-06 15:20:14.767: E/AndroidRuntime(32191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 03-06 15:20:14.767: E/AndroidRuntime(32191): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 03-06 15:20:14.767: E/AndroidRuntime(32191): at dalvik.system.NativeStart.main(Native Method) 

您應該使用全局變量( WebView WebView; )來做事,但您的onCreate()還有另一個本地WebView變量( WebView webView = (WebView) findViewById(R.id.mainWebView); onCreate()

因此,像這樣修改您的代碼:

public class BroadbentStudios extends Activity {

    WebView webView;
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);

        webView = (WebView) findViewById(R.id.mainWebView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.loadUrl("http://www.bsstudios.portfoliobox.me");

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }
        });
    }

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

我只是運行上面的代碼。 我保證此代碼有效;)

祝好運 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM