2012-12-10 19 views
6

Mam proste WebViewClient dla mojego WebView i jestem nadrzędnymi shouldInterceptRequest: (nie rzeczywisty kod)Android WebClient, wracając Zasób obrazu poprzez WebResourceResponse - nie wyświetlanie obrazu

public class WebViewClientBook extends WebViewClient 
{ 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) 
    { 
     File file = new File("pathToTheFile.jpeg"); 
     FileInputStream inputStream = new FileInputStream(file); 

     return new WebResourceResponse("image/jpeg", "UTF-8", inputStream); 
    } 
} 

Z jakiegoś powodu, WebClient nie jest w stanie wyświetlić obraz ... Sądzę, że może to mieć coś wspólnego z nieprawidłowym kodowaniem: UTF-8.

Wszelkie sugestie, co należy stosować jako alternatywę?

Dzięki!

Odpowiedz

2

robisz to źle. Masz 2 sposoby na zrobienie tego, a to zależy od tego, co otrzymuje ten obraz.

Przypadek 1: Użytkownik chce zwrócić tablicę bajtów. W takim przypadku powinieneś mieć JavaScript traktujący go i analizujący go w łańcuchu i przypisujący go do pola src twojego znacznika na webView.

File imagefile = new File(otherPath); 
    FileInputStream fis = null; 
    try { 
     fis = new FileInputStream(imagefile); 
     finall = fis; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    Bitmap bi = BitmapFactory.decodeStream(fis); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     //PNG OR THE FORMAT YOU WANT 
    bi.compress(Bitmap.CompressFormat.PNG, 100, baos); 

    byte[] data = baos.toByteArray(); 
    InputStream is = new ByteArrayInputStream(finaldata); 
    return new WebResourceResponse("text/html", "UTF-8", is); 

Przypadek 2: zanalizować wszystko na aktywność i przekazać pełny kod HTML, więc w Webview będziesz miał których właściwość innerHTML zostaną zaktualizowane z tymi danymi.

 File imagefile = new File(otherPath); 
    FileInputStream fis = null; 
    try { 
     fis = new FileInputStream(imagefile); 
     finall = fis; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    Bitmap bi = BitmapFactory.decodeStream(fis); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     //PNG OR THE FORMAT YOU WANT 
    bi.compress(Bitmap.CompressFormat.PNG, 100, baos); 

    byte[] data = baos.toByteArray(); 
    String image64 = Base64.encodeToString(data, Base64.DEFAULT); 
    String customHtml = "<html><body><h1>Hello, WebView</h1>" + 
      "<h2><img src=\"data:image/jpeg;base64," + image64 + "\" /></img></h2></body></html>"; 
     InputStream is = new ByteArrayInputStream(finaldata); 
    return new WebResourceResponse("text/html", "UTF-8", is); 

W przypadku, gdy po prostu chcesz załadować obraz zawsze można zrobić webView.loadData(String data, String mimeType, String encoding)

Nadzieja pomaga, właśnie kopalnia pracuje z tym

0

miałem podobny problem i ustawień dwie flagi rozwiązać moje problemy:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
    getSettings().setAllowFileAccessFromFileURLs(true); 
    getSettings().setAllowUniversalAccessFromFileURLs(true); 
} 
Powiązane problemy