2012-05-22 2 views
5

После обработки файла, я получаю HTML строку, в которой образ установлен какAndroid: Показ изображений в WebView

<img src="abc.001.png" width="135" height="29" alt="" style="margin-left:0pt; margin-top:0pt; position:absolute; z-index:-65536" /> 

Путь изображения не должен быть изменен, потому что я должен выбрать пункт файл из списка. Изображение находится в том же каталоге, что и файл. Я загружаю HTML-строку с помощью loadData/loadDataWithBaseURL, но изображение не отображается. Я вижу только его рамку.

Как это исправить? И могу ли я применить это решение в случае, если у меня есть много изображений, индексированных как .001.jpg, .002.png и т. Д. (Все в каталоге)?

Обновление: Спасибо, он работает с инструкцией loadUrl() независимо от того, как я называю изображение. На самом деле мне приходится читать и обрабатывать контент перед его загрузкой в ​​WebView. Вот почему я использую инструкцию loadDataWithBaseUrl() и получаю проблему выше. Вот мой код в тестовом проекте, чтобы читать и отображать содержимое Test.html.

String res = "";   
    File file = new File(Environment.getExternalStorageDirectory()+"/Test.html"); 
    try { 
     FileInputStream in = new FileInputStream(file); 

     if (in != null) {    
      BufferedReader buffreader = new BufferedReader(
        new InputStreamReader(in)); 
      String line; 
      while ((line = buffreader.readLine()) != null) { 
       res += line; 
      } 
      in.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
    wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null); 
    //wv.loadUrl("file://"+Environment.getExternalStorageDirectory()+"/Test.html"); 

Утверждение в // работает, но это не то, что я могу сделать в своем реальном проекте. У меня есть решение: после обработки содержимого я должен сохранить его во временном HTML-файле, а затем загрузить его, этот файл будет удален позже. Тем не менее, я все еще жду лучшего решения :)

ответ

9

Попробуйте изменить название файла изображения. Я думал, это из-за двойной точки в названии.

<img id="compassRose" src="CompassRose.jpg"></img> 

это работает для меня ....

Код:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.webkit.WebView; 

public class StackOverFlowActivity extends Activity { 

    private Handler mHandler = new Handler(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     WebView view=(WebView)findViewById(R.id.webView1); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.loadUrl("file:///android_asset/index.html"); 
     view.addJavascriptInterface(new MyJavaScriptInterface(), "Android"); 
    } 

    final class MyJavaScriptInterface 
    { 
     public void ProcessJavaScript(final String scriptname, final String args) 
      {    
       mHandler.post(new Runnable() 
        { 
         public void run() 
          { 
           //Do your activities 
          } 
        }); 
      } 
    } 
} 

index.html:

<html> 
<head> 
    <title title="Index"></title>         
</head> 

<body> 
    <h2>Android App demo</h2> 
    <br /> <img src="CompassRose.jpg" /> 
</body> 
</html> 

enter image description here

Результат:

enter image description here

+0

Я сделал еще один Android проект просто проверить с именем "abc.jpg".Ничего особенного, WebView просто показывает рамку изображения. Поэтому я думаю, что WebView не распознает часть src не из-за имени изображения. К сожалению, я не могу вставить в файл полный путь к изображению. –

+0

См. Отредактированный код, это работает на меня .... вы пробовали вот так? – Ponmalar

+0

Если у вас есть решение, принимайте это как ответ – Ponmalar

1

Ваша проблема с линией:

wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null); 

Первый параметр (BaseUrl) равна нулю. По какой-то причине WebView затем отказывается загружать любые связанные ресурсы, даже если вы используете абсолютные URL-адреса. Вы можете обнаружить, что это будет работать, если вы измените свой код (предполагая, что изображения хранятся во внешней директории):

wv.loadDataWithBaseURL ("file://" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null); 

Не забудьте добавить правильное разрешение, если вы обратитесь к ресурсам сети:

<uses-permission android:name="android.permission.INTERNET" /> 

Извините, немного поздно в моем ответе. Я исследовал аналогичную проблему, когда я столкнулся с этим сообщением.

+0

Если бы та же проблема, все, что мне не хватало, было 'Environment.getExternalStorageDirectory() 'in' wv.loadDataWithBaseURL ("file: //" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null); ' –

0

просто использовать:

webview.loadUrl("file:///android_asset/mypicture.jpg"); 
0
 WebView webView=(WebView)findViewById(R.id.my_wb); 
     String url = "YOUR URL"; 
     webView.getSettings().setLoadsImagesAutomatically(true); 
     webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     webView.loadUrl(url); 
+3

Добро пожаловать в StackOverflow. Хотя этот ответ может работать, пожалуйста, подумайте над добавлением дополнительной информации/описания, чтобы помочь другим пользователям понять, что вы имеете в виду. Благодарю. –