Anila
Anila

Reputation: 1136

Android: cannot load image to webview from internal storage

For my android app I want to load a html file to webview, this html file will be stored in "data/data/com.myapp/files/index.html". I am able to load it with the associated javascript files but when I want to load the image from "data/data/com.myapp/files/img/image.png" it doesn't work. This is how i'm trying to do it:

webView.loadDataWithBaseURL(getFilesDir()+"/img/", html, "text/html","utf-8", ""); //html is my html string I get from index.html

I've also tried:

webView.loadUrl(getFilesDir()+"/img/"+index.html");

In my html file i have

 <img id="image" src="/img/image.png"/>

I've verified and the file is loaded on the disk but i can't display it on webview, the display stays blank for image. I just can't make it work. So my question is: is it even possible? If yes can someone please tell me how?

I've searched and found that others had similar problems but none of the solutions is working.

EDIT: Putting my files in asset directorty is not an option for me, which i've already tested and it works.

I just tried the following code I found here: Load the image saved in sdcard in webview

String base = getFilesDir(); 
String imagePath = base + "/test.jpg"; 
String html = ("<html>
            <head>
            </head>
            <body>
            <img src=\""+ imagePath + "\">
            </body>
            </html>
            "); 
mWebView.loadData(html, "text/html","utf-8");

But still no success, apparently it worked for the person who asked the question. I've also tested with the external storage but the result is same. All permissions are there in manifest.xml. So I really don't see what the problem is. Any suggestion or advice will be appreciated.

Upvotes: 0

Views: 4782

Answers (3)

riowww
riowww

Reputation: 123

When you want to save image to internal storage, be sure not to use same code as downloading html file. That's the mistake I made. Instead, use

How to download and save an image in Android

to save your image, then the image should be fine

Upvotes: 0

Anila
Anila

Reputation: 1136

Problem solved. It was actually coming from bad formatted data, once I checked and added correct files to phone memory it started working.

Upvotes: 0

Hossain Khan
Hossain Khan

Reputation: 6452

Consider putting static files in assets folder inside android project, and try loading file using:

mWebView.loadUrl("file:///android_asset/html/index.html");

And then, from HTML file refer to images, styles using relative path.

For example, in your case, you would have follwing directory structure:

PROJECT-ROOT
 |-src/
 |-assets/
    |-html/index.html
      |-img/image.png
      |-css/style.css

After this, you can use normal html tags inside index.html as you would do to make any web page. Eg. <img id="image" src="img/image.png"/> or <link rel="stylesheet" type="text/css" href="css/style.css">

Don't forget to enable JavaScript using:

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

Upvotes: 1

Related Questions