Я только что запустил 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)