Blackberry: загрузка изображений в настраиваемое поле замедляет VerticalFieldManager - PullRequest
0 голосов
/ 27 декабря 2011

Вот метод рисования моего настраиваемого поля:

   protected void paint(Graphics graphics) {

            new downloadImage();
            Bitmap img =  downloadImage.connectServerForImage(this.poster);


            graphics.drawBitmap(0, 0, 100, 150, img, LEFT, TOP);
     }

Вот метод connectServerForImage:

public static Bitmap connectServerForImage(String url) {

          HttpConnection httpConnection = null;
          DataOutputStream httpDataOutput = null;
          InputStream httpInput = null;
          int rc;

          Bitmap bitmp = null;
          try {
           httpConnection = (HttpConnection) Connector.open(url);
           rc = httpConnection.getResponseCode();
           if (rc != HttpConnection.HTTP_OK) {
            throw new IOException("HTTP response code: " + rc);
           }
           httpInput = httpConnection.openInputStream();
           InputStream inp = httpInput;
           byte[] b = IOUtilities.streamToBytes(inp);
           EncodedImage hai = EncodedImage.createEncodedImage(b, 0, b.length);
           return hai.getBitmap();

          } catch (Exception ex) {
           System.out.println("URL Bitmap Error........" + ex.getMessage());
          } finally {
           try {
            if (httpInput != null)
             httpInput.close();
            if (httpDataOutput != null)
             httpDataOutput.close();
            if (httpConnection != null)
             httpConnection.close();
           } catch (Exception e) {
            e.printStackTrace();

           }
          }
          return bitmp;
         }

Я помещаю несколько экземпляров своего настраиваемого поля в менеджер вертикального поля, но изображения замедляют прокрутку. Кажется, что каждый раз, когда я прокручиваю, он снова запускает метод рисования, даже если изображение уже загружено.

Я думаю, мне нужно будет загрузить изображения в другой теме? Кто-то ведет меня в правильном направлении.

1 Ответ

3 голосов
/ 27 декабря 2011
  1. Вы должны начать любое HTTP-взаимодействие в отдельном потоке (без блокирующего вызова).
  2. Чтобы не загружать одно и то же изображение несколько раз, кэшируйте уже загруженное изображение. Вы можете использовать URL-адрес загрузки изображения в качестве тега изображения для хранения им.
  3. Каждый раз, когда на экране появляется событие, вызывается метод рисования. Поэтому не начинайте скачивать изображение, если оно уже загружено.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...