Открыть локальный Html-файл в Webview — Android

#java #android

#java #Android

Вопрос:

Я сохранил файл в корневой папке и пытаюсь открыть его в webview.

Это мой код для сохранения:

     OutputStream outstream = null;
    outstream = openFileOutput(fileName ,MODE_WORLD_READABLE);

    /// if file the available for writing
    if (outstream != null) {
        /// prepare the file for writing
        OutputStreamWriter outputreader = new OutputStreamWriter(outstream);
        BufferedWriter buffwriter = new BufferedWriter(outputreader);

        /// write the result into the file
        buffwriter.write(result);
    }

    /// close the file
    outstream.close();

} catch (java.io.FileNotFoundException e) {
    System.out.println("File not found in the writing...");
} catch (IOException e) {
    System.out.println("In the writing...");
}
  

Это мой код для вызова файла:

                     fileView.getSettings().setJavaScriptEnabled(true);
            fileView.loadUrl("file:///"   name); <---
  

и внутри приложения это выдает мне ошибку «файл не найден».

Любая информация полезна.

Ответ №1:

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

            mWebView.loadUrl("file:///book.html");
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.getSettings().setSaveFormData(true);
            mWebView.getSettings().setBuiltInZoomControls(true);
            mWebView.setWebViewClient(new MyWebViewClient());

private class MyWebViewClient extends WebViewClient 
{ 
    @Override 
    //show the web page in webview but not in web browser
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl (url); 
        return true;
    }
}
  

попробуйте это

Комментарии:

1. Это также позволяет избежать сбоя URI в API> 26.

Ответ №2:

На самом деле, когда вы открываете URL с помощью file:///...
Тогда это означает, что вы должны сохранить файл в каталоге assets (скажем test.html ). Теперь предположим, что вам нужно получить доступ test.html файл, который вам нужно записать следующим образом

 loadURL("file:///android_asset/test.html');
  

Комментарии:

1. Я хочу перейти из test.html для page1.html Я использую <a href="page1.html">Page 1 </a> в test.html потому что оба находятся в одном каталоге, но не работают

Ответ №3:

Указан неверный путь, предполагающий, что исключения не были затронуты.

file:/// указывает браузеру искать /name

openFileOutput (имя файла) сообщает приложению о необходимости записи в <application-files-directory>/fileName

Ваш URL-адрес должен быть «file:///» getFilesDir() File.separator fileName

Комментарии:

1. Я подумываю о том, чтобы начать создавать игры для Android. Теоретически, возможно ли для меня создать html5 canvas и игру на javascript, сохранить файлы локально на телефоне Android, а затем открыть их с помощью webview, позволяющего игроку играть в игру?

Ответ №4:

Для файлов, которые будут поставляться в комплекте с приложением, вы можете добавить папку «asset» в свой проект, щелкнув правой кнопкой мыши ваше приложение в project Explorer, затем выберите

Создать=> Папка => Папка активов.

Добавьте HTML-файл в свою папку ресурсов, затем загрузите его с помощью:

 fileView.loadUrl("file:///android_asset/" name);
  

тот же URL может использоваться в вашем HTML для ссылки на другие HTML или CSS файлы.

Ответ №5:

Вы можете сначала прочитать свой файл ресурсов, а затем отобразить его в webview через asd следующим образом

         BufferedReader read = null; 
StringBuilder data = new StringBuilder(); 
try {
            read = new BufferedReader(new InputStreamReader(getAssets().open("htmlFile.html"), "UTF-8")); 
            String webData;
            while ((mLine = read.readLine()) != null) {
               data.append(mline);
            } 
    } catch (IOException e) {
             log(",e.getmessage()) } finally {
            if (reader != null) {
                 try {
                     reader.close();
                 } catch (IOException e) {
                     log(",e.getmessage())
                 }
            } 
    }
  

а затем загрузите эти данные в webview

 webview.loadData(data, "text/html", "UTF-8");
  

Ответ №6:

Пожалуйста, обратитесь к видео на YouTube https://youtu.be/n2KbDqoCv_Q?t=173

Я протестировал его решение, и оно работает.