Ответ 1
Встраивать исходные коды с кодировкой base64 непосредственно в файл <img>
-tag:
<img src="data:image/jpeg;base64,base64DataHere" />
Вот пример создания <img>
-tag (я использую байтовый массив вместо String для raw-data, потому что в моих тестах источник String не работал - я предполагаю, что String не может обрабатывать двоично-данных):
byte[] imageRaw = yourImage;
String image64 = Base64.encodeToString(imageRaw, Base64.DEFAULT);
String pageData = "<img src=\"data:image/jpeg;base64," + image64 + "\" />";
Base64-класс был представлен с API v.2.2 - для более старых версий API вы можете скопировать исходный файл из git и интегрируйте его в свое приложение. Он должен работать со старыми версиями API.
Или вы можете использовать один из альтернативных классов для base64-кодирования, например Base64Coder.
И вот полный рабочий код для извлечения, преобразования и отображения изображения:
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);