Хобрук: Ваш путь к мастерству в программировании

Веб-просмотр во фрагменте вызывает сбой

Итак, я работаю над приложением в Android Studio для школы. У меня есть веб-просмотр внутри фрагмента. Но в приложении, когда я открываю фрагмент на своем телефоне, приложение вылетает, и мой телефон говорит: «К сожалению, приложение LARKer остановлено».

Вот класс фрагмента:

import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * Created by Andrew on 12/29/2014.
 */
public class menu4_Fragment extends Fragment {
    private WebView mWebView;

    View rootview;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootview = inflater.inflate(R.layout.menu4_layout,container,false);

        mWebView = (WebView) getView().findViewById(R.id.webView);
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mWebView.loadUrl("foo");
        mWebView.setWebViewClient(new MyWebViewClient());

        return rootview;
}

    public class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(Uri.parse(url).getHost().contentEquals("foo")) {
                // This is my website, so do not override; ler my WebView load the page

                return false;
            }

            //Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
}

А вот XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="LARK: Login"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"
        android:textSize="50dp" />

    <WebView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/webView"
        android:layout_below="@+id/textView"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

Вот изображение того, что у меня на телефоне: screenshot


  • Можете ли вы опубликовать свой logcat 30.12.2014

Ответы:


1

Изменить этот код

  mWebView = (WebView) getView().findViewById(R.id.webView);

Вот так и будет работать

  mWebView = (WebView) rootview.findViewById(R.id.webView);

Вы должны получить представление из своей группы просмотра. В противном случае он вернет ошибку.

30.12.2014

2

измените это на свой метод oncreateview() вашего фрагмента

mWebView = (WebView) rootview.findViewById(R.id.webView);
30.12.2014

3

Попробуйте этот код,

    WebView webViewInfo = (WebView) findViewById(R.id.webview);
    webViewInfo.getSettings().setJavaScriptEnabled(true);
    webViewInfo.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webViewInfo.setWebViewClient(new MYWEBCLIENT());
    webViewInfo.loadData("LOAD_YOUR_URL", "text/html", "UTF-8");

И класс WebViewClient реализует метод веб-просмотра.

private class MYWEBCLIENT extends WebViewClient {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @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) && webViewInfo.canGoBack()) {
        webViewInfo.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Я надеюсь, что этот код поможет вам...!!

30.12.2014
  • Пожалуйста, не вызывайте loadUrl для URL-адреса, полученного от shouldOverrideUrlLoading, так как этот обратный вызов также вызывается для подфреймов со схемами, отличными от https. Если вы перейдете на страницу типа jsbin.com/gupug/1/quiet, ваш код завершится вызовите view.loadUrl('tel:1234') и в конечном итоге вы увидите страницу с ошибкой, так как webview не знает, как загрузить tel: URL. Вместо того, чтобы вызывать loadUrl(url) и возвращать true, вы должны просто вернуть false из shouldOverrideUrlLoading. 30.12.2014
  • Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..