почему на спине нажмите это приложение с этим logcat - PullRequest
0 голосов
/ 17 октября 2019

Я только что запустил Android и создаю приложение для веб-просмотра

Весь мой план состоит в том, чтобы показывать заставку до загрузки веб-просмотра, затем переключать видимость чего-то и затем делать веб-просмотр видимым

Веб-представление отлично видно.

Веб-представление может загружать новые URL-адреса, которые нажимаются сами по себе, но как только кто-то нажимает кнопку «Назад», приложение вылетает. Почему это так?

Еще я хочу добавить URL-фильтр, который не будет загружать другие URL, отличные от моего сайта. Я видел некоторые ТАК ответы о том, как это сделать, но они также разбивают мое приложение. Здесь я удалил этот код за один раз. Как я могу это реализовать?

Вот мое основное занятие


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private WebView wv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView wv = (WebView) findViewById(R.id.browser);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.getSettings().setDomStorageEnabled(true);


// also help in where to put the url filter thingy

        wv.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
              // this is where i change visiblity of splash page and else
            }


        });
        wv.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        wv.loadUrl("https://metv.ml");
    }
// this is the place where i tried putting the on back press code which crashes the app on going back
}

Это код, который я пытался использовать для возврата в соответствии с историей веб-просмотра

    public void onBackPressed () {
        if (wv.canGoBack()) {
            wv.goBack();
        } else {
            super.onBackPressed();
        }
    } 

Вход кошки:

2019-10-18 00:48:02.916 3711-3711/com.example.metv E/InputEventSender: Exception dispatching finished signal.
2019-10-18 00:48:02.916 3711-3711/com.example.metv E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
2019-10-18 00:48:02.917 3711-3711/com.example.metv E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.webkit.WebView.canGoBack()' on a null object reference
        at com.example.metv.MainActivity.onBackPressed(MainActivity.java:33)
        at android.app.Activity.onKeyUp(Activity.java:3185)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2743)
        at android.app.Activity.dispatchKeyEvent(Activity.java:3503)
        at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:115)
        at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:84)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:133)
        at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:558)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2814)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:409)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5857)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5715)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5177)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5237)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5196)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5363)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5204)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5420)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5177)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5237)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5196)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5204)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5177)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5237)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5196)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5396)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5561)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2848)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2343)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2334)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2825)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
        at android.os.Looper.loop(Looper.java:189)
        at android.app.ActivityThread.main(ActivityThread.java:7183)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
2019-10-18 00:48:02.917 3711-3711/com.example.metv D/AndroidRuntime: Shutting down VM
2019-10-18 00:48:02.920 3711-3711/com.example.metv E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.metv, PID: 3711
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.webkit.WebView.canGoBack()' on a null object reference
        at com.example.metv.MainActivity.onBackPressed(MainActivity.java:33)
        at android.app.Activity.onKeyUp(Activity.java:3185)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2743)
        at android.app.Activity.dispatchKeyEvent(Activity.java:3503)
        at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:115)
        at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:84)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:133)
        at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:558)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2814)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:409)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5857)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5715)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5177)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5237)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5196)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5363)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5204)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5420)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5177)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5237)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5196)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5204)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5177)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5237)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5196)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5396)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5561)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2848)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2343)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2334)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2825)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
        at android.os.Looper.loop(Looper.java:189)
        at android.app.ActivityThread.main(ActivityThread.java:7183)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)

1 Ответ

1 голос
/ 17 октября 2019
private WebView wv;

Это поле, которое вы никогда не инициализируете.

 public void onBackPressed () {
    if (wv.canGoBack()) {

Здесь вы вызываете метод для неинициализированного поля, следовательно, NPE.

protected void onCreate(Bundle savedInstanceState) {
    //...
    WebView wv = (WebView) findViewById(R.id.browser);

Это локальная переменная, которую вы инициализируете. Измените WebView wv = на wv =, чтобы инициализировать ваше поле вместо объявления и инициализации локальной переменной.

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