Как загружать изображения асинхронно с веб-сервера

Экран моего приложения выглядит аналогично приложенному изображению. У меня есть несколько строк, и каждая строка имеет растровое изображение, поле заголовка и описания. Вся информация извлекается с нашего поддерживающего веб-сервера в форме XML. Теперь я использовал шаблон проектирования наблюдателя, который создает отдельный поток для подключения к моему удаленному серверу по протоколу HTTP, загрузки и анализа XML. XML включает в себя URL-адрес изображения, заголовок и описание для каждой строки.

enter image description here

Я пробовал несколько подходов до сих пор,

Approach 1:

Created a separate method (drawRow()), which takes care of putting the contents together by specifying the layout. And, then using the method downloadImage(), I am trying to download the remote URL from the drawRow() method. But it sucks, as it downloads using the same thread and UI gets blocked.

Approach 2:

В поисках вышеуказанного вопроса я наткнулсяWebBitmapField в ежевике отcoderholic.com.

И затем я использую приведенный ниже код из моего метода drawRow (). Как я понимаю, WebBitmapField использует шаблон проектирования наблюдателя, и изображение загружается поверх потока, отличного от потока пользовательского интерфейса. Это прекрасно работает, когда у меня ограниченное количество строк, например 5 или 10. Но когда у меня больше строк, которые нужно нарисовать, он выбрасываетTooManyThreads исключение, так как он создает новый поток для каждой строки.

У меня есть эта ссылкаtaskworker-нить-ежевика, но не очень понятно, как добиться моего требования.

Как я понимаю, в приложении blackberry приложение может создать не более 16 потоков. Итак, теперь я верю. Мне может понадобиться создать пул потоков, указав максимальный размер до 10.

Can anyone please help me to understand and implement the thread pooling for blackberry for my current problem?

Also, I appreciate anyone giving me any other best approach which will fit for my requirement.

Заранее спасибо.

Ответы на вопрос(1)

Решение Вопроса

У вас есть все, что вам нужно. Так:

  1. Create one TaskWorker for your application (use singelton)
  2. Implement Task class from TaskWorker - DownloadImageTask (simply put everything from Runnable.run() to Task.doTask() method)
  3. Instead of new thread creation in Util.getWebData() call TaskWorker.addTask()

Есть, вероятно, более мелкие детали, но вы могли бы выяснить, как это закончить.

И я думаю, что лучше иметь два метода вCallback - success(byte[] data) а такжеerror(Throwable error) - определить конечный результат и избежать конвертации изображений вString и назад.

Ваш ответ на вопрос