Как создать изображение из URL Codenameone

Мне нужно создать новый экземпляр изображения из строки, содержащей URL-адрес изображения.
Например. http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png

Этот тип URL-адресов поступает из JSONParser, и я хочу использовать их для заполнения значков многокнопочного списка.

Я использую следующий метод getItemAt этого класса Model для помещения данных в многокнопочный список. Каждая мультикнопка имеет значок и несколько строк. Я назвал Line1 как имя и Line2 как рейтинг. Я хочу из URL-адреса строки создать изображение, чтобы я мог изменить значок многокнопки вместо defaultIcon в строке h.put("icon", defaultIcon).

static class Model implements ListModel {
    public Object getItemAt(int index) {
        Hashtable h      = new Hashtable();
        Hashtable entry  = (Hashtable) results.elementAt(index);
        String    name   = (String) entry.get("name");
        Double    rating = (Double) entry.get("rating");
        String    url    = (String) entry.get("icon");

        h.put("name", name);
        h.put("icon", defaultIcon); // change defaultIcon with an Image from url String

        if (rating == null) {
            h.put("rating", "Not rated");
        } else {
            h.put("rating", "Rating: " + rating.toString());
        }

        return h;
    }

person Aris F.    schedule 19.10.2012    source источник
comment
Какой тип изображения? Буферизованное изображение? А также, пожалуйста, расскажите нам, что вы пробовали и как это не работает. Кстати, это не мой голос. Также мое будущее голосование, если вы предоставите запрошенную мной информацию. :)   -  person Hovercraft Full Of Eels    schedule 19.10.2012


Ответы (2)


Используйте ImageDownloadService.createImageToStorage, который асинхронно загрузит изображение, поместите его в хеш-таблицу для списка в нужном месте. Обновите список и кэшируйте изображение в хранилище на случай повторного запроса.

Он также может масштабировать ваше изображение до фиксированного размера в рамках услуги.

person Shai Almog    schedule 20.10.2012
comment
Это кажется мне продвинутым. Я пытаюсь расширить MapsDemo и отобразить места, возвращенные из showResturantsOnMap, в виде списка со значком, именем, рейтингом и расстоянием. Чтобы создать этот список, я использовал логику из Contacts.java в демоверсии KitchenSink. Извините, но я не понимаю, как использовать вашу информацию. - person Aris F.; 21.10.2012
comment
Изображения необходимо загружать в фоновом режиме, поэтому список будет заполняться по мере его использования. Просто поместите экземпляр-заполнитель в запись фотографии в своей хеш-таблице и для каждой записи в списке (при создании экземпляра записи) вызовите ImageDownloadService.createImageToStorage(URL, listInstance, offsetInTheList, photo, uniqueIdForThisEntryCanBeAnyString, new Dimension(widthOfPreviewImage, heightOfPreviewImage); - person Shai Almog; 22.10.2012

Вы можете использовать это для получения изображения с URL-адреса

Image image = Toolkit.getDefaultToolkit().getDefaultToolkit().createImage(url);

это тоже может сработать

Image image = ImageIO.read(url); 
person Dan Iliescu    schedule 19.10.2012
comment
Это не работает. Возник конфликт с классом codenameone api Image. Вот API: codenameone.googlecode.com/svn/trunk/CodenameOne. /javadoc/ Я думаю, что мое решение находится в классе ImageDownloadService, но я не понимаю, как его использовать в моем случае. - person Aris F.; 19.10.2012
comment
Это вопрос Codename One, а не вопрос AWT, поэтому этот ответ неверен. - person Shai Almog; 20.10.2012