Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams
String baseUrl = "file:///android_asset/folder1/";
webView.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);

But images don't loading.

If I put images to "assets" directory (MyProject/assets/) and make baseUrl = "file:///android_asset" images are loaded correctly;

How load images not only from root assets directory, but and from assets/folder1?

I saw a long post about this subject a while ago. If you still need some help with it look it up. devblog.morethanheroic.com/2017/01/03/… – Lakatos Gyula Jan 3, 2017 at 18:05 String html = "<html><head><title>TITLE!!!</title></head>"; html += "<body><h1>Image?</h1><img src=\"icon.png\" /></body></html>"; webview.loadDataWithBaseURL("file:///android_res/drawable/", html, "text/html", "UTF-8", null);

For more information try this link

perfect LoadDataWithBaseurl

The baseURL lets you to run all the files such as .js/.css/.html files from their folders. For example, there is a folder and all .js/.css/.html files in it, and you call .html files where you locate the folder address as called baseURL: webview.loadDataWithBaseURL("file:///android_asset/myWebFilesInThisFolder/", "<html><body><p>hello world</p></body></html>" So, you don't have to write a full address for JS/CSS/HTML just bundle it! – Bay Sep 17, 2019 at 11:21 @Janmejoy FYI the second link (LoadDataWithBaseurl) is pointing to http://lomza.people.totem-soft.com/?p=62 which seems to be an invalid location. – Marino Aug 6, 2021 at 13:23

I think you have to set the base to assets and add the sub folders to your image src's like this:

webView.loadDataWithBaseURL("file:///android_asset/", readAssetFileAsString("folder1/index.html"), "text/html", "UTF-8", null);

Html: <img src="folder1/image1.jpg">

This worked for me on Android 5.1

private String readAssetFileAsString(String sourceHtmlLocation)
    InputStream is;
        is = getContext().getAssets().open(sourceHtmlLocation);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        return new String(buffer, "UTF-8");
    catch(IOException e)
        e.printStackTrace();
    return "";
                added method code, this code was previously taken from another SO post but unfortunately I don't have the link to credit them
– behelit
                Sep 19, 2016 at 0:43
            bitmap = BitmapFactory.decodeFile(filePath);
            Log.v("Image data-->", "" + bitmap);
            imageWidth = bitmap.getWidth();
            imageHeight = bitmap.getHeight();
            Log.e("Width", "" + imageWidth);
            filePath = "file://" + filePath;
            String html = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html\";charset=utf-8\"/><title></title></head><body style=\"width:"
                    + imageWidth
                    + "px; height:"
                    + imageHeight
                    + "px; background:url("
                    + filePath
                    + ") no-repeat; position:relative;\">"
                    + getDivTag(mapList)
                    + "</body></html>";
            Log.v("MIS", "" + html);
            webview.getSettings().setSupportZoom(true);
            webview.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
            System.out.println(html);
        } catch (Exception e) {
            e.printStackTrace();
                Seriously? if He says putting them in one folder works well means he must have put the permission.
– Darpan
                Sep 4, 2014 at 10:57
                @Darpan The answer is totally irrelevant so is your comment. This works because OP's assets are local and don't need the internet permission. Simply, "he must have put the permission." is invalid argument
– Farid
                Jun 24, 2021 at 13:25
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.