2011-03-10 22 views
15

aşağıdakiWebView loaddata ile görüntü nasıl görüntülenir?

String urlStr = "http://example.com/my.jpg" 
String mimeType = "image/jpeg"; 
String encoding = null; 
String pageData = ""; // This is data read in from an HttpURLConnection 
webview.loadDataWithBaseURL(urlStr, pageData, mimeType, encoding, urlStr); 

var ama bu çalıştırdığınızda, tüm gördüğüm yerine benim görüntünün mavi soru işareti. Bir WebView'de bir görüntüyü loadData ile görüntülemenin doğru yolu nedir?

Düzenleme: <img src="http://example.com/my.jpg/"> olarak pageData geçmeden bunu yapmanın bir yolu var mı? Bu sadece "text/html" işlemek için loadData mime-type alır aptalca görünüyor. . Özellikle geçmek olabilecek bir örnek mim-tipi olarak javadoc listeleri "image/jpeg" beri

cevap

40

O <img> Etiketleme-içine yönlendirmek ImageData base64 olarak kodlanmış embedd mümkündür: Burada

<img src="data:image/jpeg;base64,base64DataHere" /> 

<img> -tag oluşturmak için bir örnek (Ben bir veri kaynağı olarak dize yerine bir bayt dizisi kullanıyorum, çünkü bir dize olarak kaynak benim çalışmadı - Dize, ikili veriyi işleyemediğini varsayalım):

byte[] imageRaw = yourImage; 
    String image64 = Base64.encodeToString(imageRaw, Base64.DEFAULT); 
    String pageData = "<img src=\"data:image/jpeg;base64," + image64 + "\" />"; 

Base64 sınıfı i API v.2.2 ile oluşturulmuş - eski API sürümleri için sourcefile from git'u kopyalayabilir ve uygulamanıza entegre edebilirsiniz. Eski API sürümleriyle çalışmalıdır. Veya Base64Coder gibi base64 kodlaması için alternatif sınıflardan birini kullanabilirsiniz.


Ve burada görüntü, alma dönüştürme ve göstermek için komple çalışma kodu

:

byte[] imageRaw = null; 
    try { 
    URL url = new URL("http://some.domain.tld/somePicture.jpg"); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

    InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 

    int c; 
    while ((c = in.read()) != -1) { 
     out.write(c); 
    } 
    out.flush(); 

    imageRaw = out.toByteArray(); 

    urlConnection.disconnect(); 
    in.close(); 
    out.close(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    String image64 = Base64.encodeToString(imageRaw, Base64.DEFAULT); 

    String urlStr = "http://example.com/my.jpg"; 
    String mimeType = "text/html"; 
    String encoding = null; 
    String pageData = "<img src=\"data:image/jpeg;base64," + image64 + "\" />"; 

    WebView wv; 
    wv = (WebView) findViewById(R.id.webview); 
    wv.loadDataWithBaseURL(urlStr, pageData, mimeType, encoding, urlStr); 
+0

En azından bu iki verilerini alırken önler. Her zaman "text/html" ise API'daki mimetype konusunu ele almaz. –

+0

Ağdan getirilen bir görüntüün web görüntülemede hiç yapılmadığı bir sorun yaşadım ( sami

+0

Yukarıdakilere dayanarak kod kullanırken, URL'deki satır besleme desteğiyle ilgili olarak Chromium'dan yapılan Logcat kullanımdan kaldırılma uyarılarını fark ettim. Tahmin ettiğim şey, son aylarda yalnızca uyarı vermeye başladı. Uyarılar, hat beslemeli URL'lerin desteklenmesinin muhtemelen Ağustos 2017'ye kadar engelleneceğini belirtir. Bu satır beslemelerini önlemek için 'Base64.NO_WRAP' kullandığımda bu uyarılar artık oluşmaz. – Trevor

4
Use this.. solve the problem of images load in webview. 

    WebView webView = (WebView)findViewById(R.id.webView1); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setJavaScriptEnabled(true); 

    String url ="Path of image"; 

    String imgSrcHtml = "<html><img src='" + url + "' /></html>"; 
    webView.loadData(imgSrcHtml, "text/html", "UTF-8"); 
İlgili konular