веб-просмотр андроида с пустой страницей

У меня есть приложение для Android, которое я разрабатываю с использованием эмулятора, работающего на Android 2.3.3, со встроенным WebView в рамке, вложенной в линейный (вертикальный). Независимо от того, какой код я использую, он никогда ничего не делает. У меня есть разрешения на приложение для Android в INTERNET. Даже при попытке загрузить только код HTML. Я получаю пустую белую страницу, никаких ошибок нет. Ничего в logcat.

WebView wview = (WebView)findViewById(R.id.webView1);
wview.getSettings().setJavaScriptEnabled(true);

Я попытался все три из них попытаться загрузить что-либо в webview:

wview.loadUrl("http://www.google.com");
wview.loadData("<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8");
wview.loadDataWithBaseURL(null, "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8",null);

Все три дают мне те же результаты. Ничего.

Есть идеи?

Ответ 1

wbView.getSettings().setDomStorageEnabled(true);

Ответ 2

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

Поместите свой WebView в RelativeLayout а не в FrameLayout.

То, что я тестировал: мой WebView onPageFinished() вызывался каждый раз, но на экране у меня была пустая страница. Из chrome://inspect отладчик WebView я смог "ping" моего WebView, нажав кнопку inspect, и после этого WebView мгновенно WebView. Мои мысли. WebView не корректно отображается в FrameLayout, и RelativeLayout исправляет проблему (даже вызовы invalidate() и requestLayout() не помогли).

Ответ 3

Я думаю, если вы отредактируете часть своего кода, тогда это будет нормально. Посмотрите, как я это делаю в моем случае ниже. Попробуйте для вас таким образом.
Для отображения веб-страницы

final WebView wbView = (WebView) findViewById(R.id.WebView);

wbView.getSettings().setJavaScriptEnabled(true); 
wbView.loadUrl("https://play.google.com/store/apps");
wbView.clearView();
wbView.measure(100, 100);
wbView.getSettings().setUseWideViewPort(true);
wbView.getSettings().setLoadWithOverviewMode(true);

Для показа HTML:
См. Этот учебник..

Ответ 4

Я дал +1, потому что это была действительная помощь для правильной работы webview, но это не было решением моей проблемы.

Я не понял, что у меня есть wrap_content при включении моего веб-макета, и это привело к тому, что он имел высоту 0px. Установив это как fill_parent, я решил проблему. (Webview с белым фоном и приложением с белым фоном, вы не можете сказать его не полный рост, когда он отображается как полная высота в дизайнере макета).

Спасибо за вашу помощь!

Ответ 5

clearView устарел.

Использование:

webView.loadUrl("about:blank")

Ответ 6

вместо передачи null вам нужно передать пустую String. ex: ""
Поэтому вы должны называть это следующим образом:
wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");

Ответ 7

измените wrap_content на fill_parent в макете веб-просмотра. это сработало для меня

Ответ 8

Я думаю, что вам нужен WebViewClient. После установки вызова webviewclient webview.loadUrl(_url); Что-то вроде этого....

private void loadUrlInWebView(String _URL){
    WebView myWebView = (WebView) findViewById(R.id.webviewer);     

    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);

    myWebView.setWebViewClient(new MyWebViewClient());
    myWebView.loadUrl(_URL);
}

private class MyWebViewClient extends WebViewClient{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {         

            view.loadUrl(url);

        return true;
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
    }
}

Ответ 9

Если это по-прежнему не работает, попробуйте добавить "http://" или "https://" перед веб-адресом, и он должен работать.

Ответ 10

Вы можете использовать следующий код, это будет полезно:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("www.example.com")) {
            // This is my web site, so do not override; let 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;
    }
}

Ответ 11

Попытайтесь увеличить ОЗУ для своего эмулируемого устройства. Это решило проблему для меня.

Я нашел это, посмотрев сообщения logcat в Android Monitor (Android Studio). Ниже приведенные сообщения дали мне представление о том, что было не так, чтобы увеличить оперативную память:

W/art: Throwing OutOfMemoryError "Failed to allocate a 6635532 byte allocation with 1170528 free bytes and 1143KB until OOM"

W/JavaBrowserViewRendererHelper: Error allocating bitmap

E/chromium: [ERROR:java_browser_view_renderer_helper.cc(132)] Error unlocking java bitmap pixels.

Ответ 12

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

Изменение его на RelativeLayout и установка layout_height равным match_parent помогли мне.

<RelativeLayout xmlns:android=...
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/ll_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="3dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        .....

    </RelativeLayout>

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/ll_title"
        android:background="@color/colorYellow" />


    <ProgressBar
        android:id="@+id/pb_spinning"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:visibility="gone" />

</RelativeLayout>

Ответ 13

используйте IP-адрес вместо веб-URL, затем переопределите веб-клиент, используя следующий метод обработки ошибок ssl

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // Ignore SSL certificate errors
}

Ответ 14

Я была такая же проблема. И я проверил logcat в андроид студии. В одном из загружаемых сценариев js произошла ошибка.

Ошибка была связана с доступом к локальному хранилищу. И поэтому я исправил это, установив для хранилища DOM значение true.

wbView.getSettings().setDomStorageEnabled(true);