Загрузка изображений из ресурсов или ресурсов, когда веб-страница в веб-просмотре загружается с сервера - PullRequest
0 голосов
/ 07 августа 2010

Я хочу отправить веб-страницу с сервера на компоненты WebView на телефонах Android.Я уже узнал, как разрешить веб-странице взаимодействовать с обработчиком JavaScript, чтобы нативное приложение могло взаимодействовать с веб-страницей.Я, однако, застрял на изображениях.

Я хочу, чтобы веб-страница, полученная с сервера, как-то сообщала приложению, какое изображение (сохраненное в res или в активах) загрузить.Таким образом, мне не нужно отправлять изображение и по проводам.Это выполнимо?Это сделает процесс загрузки страниц WebView намного быстрее для моих целей.

Спасибо!

1 Ответ

0 голосов
/ 07 августа 2010

Вы можете получить http-ответ с удаленного URL, проанализировать его и заменить удаленные URL-адреса локальными с помощью замены строк.Затем используйте этот HTML-код для отображения в веб-представлении.

Я хочу отправить веб-страницу с сервера на WebView

Вы говорите?о механизме «толкать», а не «тянуть» (как обычно с loadUrl())?Это доступно только в 2.2

(Вопрос: я полагаю, что работа с локальными веб-страницами на устройстве полностью не работает в вашем случае, поскольку вам нужны обновленные версии с сервера, верно? Вы знаете только, что изображенияне изменится, исправьте?)

Пример кода для извлечения удаленной html-страницы - после этого вы сделаете замену строки для URL вашего изображения:

/**
 * Downloads a remote file and stores it locally
 * @param from Remote URL of the file to download
 * @param to Local path where to store the file
 * @throws Exception Read/write exception
 */
static private void downloadFile(String from, String to) throws Exception {
    HttpURLConnection conn = (HttpURLConnection)new URL(from).openConnection();
    conn.setConnectTimeout(15000); // timeout 15 secs
    conn.setDoInput(true);
    conn.connect();
    InputStream input = conn.getInputStream();
    FileOutputStream fOut = new FileOutputStream(to);
    int byteCount = 0;
    byte[] buffer = new byte[4096];
    int bytesRead = -1;
    while ((bytesRead = input.read(buffer)) != -1) {
        fOut.write(buffer, 0, bytesRead);
        byteCount += bytesRead;
    }
    fOut.flush();
    fOut.close();
}

В качестве альтернативы вы можете использовать

HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet("http://www.myurl.com");
HttpResponse res = httpClient.execute(get);
if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    InputStream input = res.getEntity().getContent();
    byte data[] = new byte[14];
    input.read(data);
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...