2015-03-06 4 views
1

В основном у меня есть простой веб-приложение, которое я делаю для университетского проекта, и я почти ничего не знаю о кодировании. Веб-просмотр работает и загружает другие ссылки, все еще находящиеся в моем приложении, как ожидалось, но кнопка «Назад» не переходит на предыдущую страницу, она просто заставляет закрывать приложение, и появляется сообщение «К сожалению,« Broadbent Studios остановлена ​​». Если я просто избавлюсь от кода для кнопки «Назад», приложение отлично работает, но тогда я не могу использовать кнопку «Назад», как вы можете, в веб-браузере, что было бы лучше.Android Webview onKeyDown force закрывает приложение

Я пробовал разные методы, которые у меня есть здесь, но никто из них не работал, это было лучшее, поскольку затмение не дает ошибок, но, очевидно, что-то не так.

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") 
 
\t 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): \t at com.broadbentstudios.BroadbentStudios.onKeyDown(BroadbentStudios.java:42) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.app.Activity.dispatchKeyEvent(Activity.java:2423) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2017) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3848) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3822) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3554) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3714) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2021) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1715) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1706) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1998) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.os.MessageQueue.nativePollOnce(Native Method) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.os.MessageQueue.next(MessageQueue.java:138) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.os.Looper.loop(Looper.java:123) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at android.app.ActivityThread.main(ActivityThread.java:5146) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at java.lang.reflect.Method.invokeNative(Native Method) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at java.lang.reflect.Method.invoke(Method.java:515) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
 
03-06 15:20:14.757: E/MessageQueue-JNI(32191): \t 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): \t at com.broadbentstudios.BroadbentStudios.onKeyDown(BroadbentStudios.java:42) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.app.Activity.dispatchKeyEvent(Activity.java:2423) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2017) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3848) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3822) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3554) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3714) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2021) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1715) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1706) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1998) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.os.MessageQueue.nativePollOnce(Native Method) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.os.MessageQueue.next(MessageQueue.java:138) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.os.Looper.loop(Looper.java:123) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at android.app.ActivityThread.main(ActivityThread.java:5146) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at java.lang.reflect.Method.invokeNative(Native Method) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at java.lang.reflect.Method.invoke(Method.java:515) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
 
03-06 15:20:14.767: E/AndroidRuntime(32191): \t at dalvik.system.NativeStart.main(Native Method)

+1

Можете ли вы предоставить журнал ошибок? –

+0

@Yiping Я так новичок. Я не знаю, где найти журнал ошибок. Если бы вы могли указать мне в правильном направлении, чтобы я мог получить тот, который был бы замечательным. –

+0

В Eclipse откройте Window-> Show View -> Other -> Android-> Logcat. Выберите Logcat, затем окно Logcat появится в вашей текущей перспективе. Когда приложение выйдет из строя, в окне появится журнал ошибок (с красным цветом). –

ответ

2

Вы должны делать вещи с глобальной переменной (WebView WebView;), но была еще одна локальная переменная 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); 
    } 
} 

Я просто побежал код выше. Я гарантирую, что этот код работает;)

Удачи;)

+0

Огромное вам спасибо, ты бог :) и спасибо за быструю помощь :) –

Смежные вопросы