2012-05-22 19 views
5

Después de procesar un archivo, me sale una cadena HTML en el que la imagen se establece comoAndroid: Muestra imágenes en Webview

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

La ruta de la imagen no debe ser modificado porque tengo que elegir el elemento de archivo de una lista. La imagen está en el mismo directorio que el archivo. Cargué la cadena HTML usando loadData/loadDataWithBaseURL, pero la imagen no se muestra. Solo veo su marco.

¿Cómo puedo solucionar esto? ¿Y puedo aplicar esa solución en caso de que tenga muchas imágenes indexadas como .001.jpg, .002.png, etc. ... (todas en un directorio)?

Actualización: Gracias, funciona con la declaración loadUrl() sin importar cómo nombre la imagen. De hecho, tengo que leer y procesar el contenido antes de cargarlo en WebView. Es por eso que uso la declaración loadDataWithBaseUrl() y obtengo el problema anterior. Aquí está mi código en el proyecto de prueba para leer y mostrar el contenido de 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"); 

La frase en // funciona pero eso no es lo que puedo hacer en mi proyecto real. Tengo una solución: después de procesar el contenido tengo que guardarlo en un archivo HTML temporal y luego cargarlo, ese archivo se eliminará más tarde. Sin embargo, todavía estoy esperando una mejor solución :)

Respuesta

9

Intente cambiar el nombre del archivo de imagen. Pensé que esto se debía a un doble punto en el nombre.

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

esto está funcionando para mí ....

Código:

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

Resultado:

enter image description here

+0

hice otro proyecto Android sólo para probar con el nombre de "abc.jpg".Nada diferente, WebView solo muestra el marco de la imagen. Así que creo que WebView no reconoce la parte src, no por el nombre de la imagen. Lamentablemente, no puedo ingresar el archivo de la ruta completa de la imagen. –

+0

Ver el código editado, esto funciona para mí ... ¿lo intentó así? – Ponmalar

+0

Si tienes solución, acepta esto como Answer – Ponmalar

1

Su problema es con la línea:

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

El primer parámetro (URLbase) es nula. Por algún motivo, WebView se niega a cargar los recursos vinculados, incluso si usa URL absolutas. Usted puede encontrar que va a funcionar si cambia el código a (suponiendo que sus imágenes se almacenan en el directorio externo):

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

Recuerde añadir el permiso apropiado si se refiere a los recursos de la red:

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

Lo siento, un poco tarde en mi respuesta. Estaba investigando un problema similar cuando me encontré con esta publicación.

+0

Tenía el mismo problema, todo lo que me faltaba era 'Environment.getExternalStorageDirectory() 'in' wv.loadDataWithBaseURL ("file: //" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null); ' –

0

simplemente utilizar:

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

Bienvenido a StackOverflow. Aunque esta respuesta puede funcionar, considere agregar más información/descripción para ayudar a otros usuarios a entender lo que usted quiere decir. Gracias. –