Подтвердить что ты не робот

Открытие новой активности Android с помощью webview показывает пустой (белый) экран вместо содержимого html

Я занимаюсь исследованиями в течение 2 дней, и я не нашел подобной проблемы в любом месте в Интернете!

Из основного действия я пытаюсь открыть новое действие, содержащее веб-представление, в котором будет отображаться html-страница (about.html) в папке android_asset.

Я могу запустить новую активность (test.java) с отображенным веб-просмотром, но содержимое веб-страницы просто не отображается. Даже вертикальная полоса прокрутки webview отображается (поскольку контент страницы относительно длинный), и я могу прокручивать страницу вверх и вниз, но без содержимого в ней!

package com.example.test;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class test extends Activity {
private TextView apppagetitle;
private WebView browser_rn;

@Override
public void onCreate(Bundle saveInstanceState) {
    super.onCreate(saveInstanceState);

    setContentView(R.layout.test);

    browser_rn=(WebView)findViewById(R.id.webkit);
    browser_rn.getSettings().setJavaScriptEnabled(true);
    browser_rn.getSettings().setPluginsEnabled(true);
    browser_rn.setScrollBarStyle(0);       

    final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    apppagetitle=(TextView)findViewById(R.id.apppagetitle);


    browser_rn.setWebViewClient(new WebViewClient() {

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }

        public void onPageFinished(WebView view, String url) {               
            apppagetitle.setText(browser_rn.getTitle());                
        }

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            if (!isInternetOn()) {
                alertDialog.setTitle("Connection Error");
                alertDialog.setMessage("You need to be connected to the internet.");
            } else {
                alertDialog.setTitle("Error");
                alertDialog.setMessage(description);
            }
            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    return;
                }
            });
            alertDialog.show();
        }
    });

    browser_rn.loadUrl("file:///android_asset/about.html");
}

public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        browser_rn.clearCache(true);
        browser_rn.clearHistory();
        this.finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
}

Странно, что новая активность (test.java) может успешно получить и отобразить заголовок веб-страницы в текстовом виде при вызове webview.gettitle(), но содержимое html просто не отображается в веб-просмотре. Все, что я вижу, это пустой экран с полосами прокрутки. Я подозреваю, что это может быть вызвано булевым "shouldOverrideUrlLoading".

Обновление:

Спасибо за ответ.

test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/com.example.test"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/green"
>
<TextView   
android:id="@+id/apppagetitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:text="Odd News"
android:textSize="25px"
android:padding="10px"
/> 
</LinearLayout>
<LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
<WebView  
android:id="@+id/webkit"
android:layout_width="fill_parent" 
android:layout_height="0px"
android:layout_weight="1"
/> 
</LinearLayout>
</LinearLayout>

about.html так же просто, как и ниже.

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>About</title> 
</head> 
<body> 
<h3 style="color:#0066dd">About</h3>  

<p>Some text here...</p>

</body> 
</html>

О да, и я забыл упомянуть ранее, что с тем же самым фрагментом кода about.html иногда появлялся, если бы я принудительно остановил и перезапустил приложение на своем телефоне. Однако он не появлялся в последующих запусках. В случаях, когда он успешно показывает about.html, и я нажимаю кнопку "Назад", чтобы вернуться к основному действию, он снова исчезнет, ​​когда я снова запустил активность из основного действия. Я потерян, но у меня есть сильное чувство, что это "shouldOverrideUrlLoading", что я не делаю правильно.

4b9b3361

Ответ 1

Не пытайтесь загрузить указанный URL-адрес в shouldOverrideUrlLoading, и не возвращайте true из него в вашем случае. Действительно, из того, что, похоже, вы пытаетесь сделать, вам не нужно переопределять его вообще.

Возврат true из shouldOverrideUrlLoading указывает WebView, что он не должен загружать указанный URL. Что вы делаете, говоря WebView, чтобы начать его загрузку снова, скорее всего, вызовет какой-то внутренний цикл внутри WebView, и я думаю, именно поэтому вы видите странное поведение.

Ответ 2

Я обновил последнюю неделю с 2.3.4 до 4.0 на моем HTC Sensation. В двух приложениях, которые я написал, был локальный сайт HTML-Contact. На 2.3 он прошел отлично, теперь я получаю сайт "Веб-страница недоступен".

Я нашел еще одно сообщение на этом сайте с комментарием: "Через некоторое обсуждение с инженером Google кажется, что они приняли решение о том, что схема файла://небезопасна".

См. здесь обходной путь: Android 4.0.1 разбивает локальное хранилище WebView HTML 5,

Ответ 3

Я могу дать другой способ решить эту проблему. Просто скопируйте файл актива в путь данных "/data/data/org.test.test/" и загрузите его в WebView следующим образом.

String strHTMLFilePath = "file:///data/data/org.test.test/Files/help_android.html";
webView.loadUrl(strHTMLFilePath);

Используйте следующий код, чтобы скопировать файл HTML из объекта в путь к данным

void getAssetFiles() {

    String  WriteFileName = "/data/data/org.test.test/";
        try {
            String list[] = thisActivity.getAssets().list("Files");
            String outFileName = WriteFileName+"Files/";
            if (list != null)
                for (int i=0; i<list.length; ++i){                          
                if(!new File(outFileName).exists()){
                    new File(outFileName).mkdirs();
                }

                OutputStream myOutput = new FileOutputStream(outFileName+list[i]);

                byte[] buffer = new byte[1024];
                int length;

                String strWritePath = "Files" + "/" + list[i];

                InputStream myInput = thisActivity.getAssets().open(strWritePath);

                while ((length = myInput.read(buffer))>0){
                    myOutput.write(buffer, 0, length);
                }
                myInput.close();

                myOutput.flush();
                myOutput.close();                           
               }
        } catch (IOException e) {

        }

    }

Ответ 4

Используйте этот

browser_rn.loadDataWithBaseURL(url); 

вместо

browser_rn.loadUrl("file:///android_asset/about.html");

Ответ 5

Вам нужно вернуть true в методе toOverrideUrlLoading

public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

Ответ 6

Добавьте следующую строку в свою деятельность, которая содержит активность WebView android:hardwareAccelerated="false"

надеюсь, что это поможет

Ответ 7

Попробуйте это изменение в text.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/com.example.test"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".text" > <!-- Here is the change -->
<LinearLayout
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/green"
>
<TextView   
android:id="@+id/apppagetitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:text="Odd News"
android:textSize="25px"
android:padding="10px"
/> 
</LinearLayout>
<LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
<WebView  
android:id="@+id/webkit"
android:layout_width="fill_parent" 
android:layout_height="0px"
android:layout_weight="1"
/> 
</LinearLayout>
</LinearLayout>

Ответ 9

соответствует той же самой проблеме.

Я пробовал решения в ссылка. Он терпел неудачу все время.

Моя ситуация такая же. В веб-просмотре есть видео H5, он хорошо справляется с первым и не работает. когда он терпит неудачу, я нашел сообщение из журнала

  • onProgressChanged, а не на 100% больше прогресса
  • chromium: [ERROR: in_process_view_renderer.cc(193)] Не удалось запросить процесс GL. Вероятно, тупик: 0

когда я вызываю метод

mWebView.loadUrl(url)//webview height is 0px now
//some code change webView height here

Мои решения устанавливают высоту веб-просмотра, например, dp или match_parent. Он работает хорошо!

Ответ 10

попробуйте изменить код

 public boolean shouldOverrideUrlLoading(WebView view, String url) { 
                        return true; 
        } 

Посмотрите на этот учебник.