2012-06-09 4 views
0

Я ищу способ отображения изображений на моем ListField из фоновой темы. Во-первых, в моем drawListRow я попробовать этотBlackberry Thread Изображение от JSON

path = (String) imagePaths.elementAt(index); 
bit = connectServerForImage(path); 

g.drawBitmap(xText, y + yText, 80, 200, bit, 0, 0); 

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

private class imgConnection extends Thread 
{  
     public imgConnection() { 
       super(); 
     } 

     public void run() {    

       try { 
        for (int i = 0; i < imagePaths.size(); i++) 
        { 
         final int index = i;        
         String path = imagePaths.elementAt(index).toString(); 
         bit = connectServerForImage(path); 
         image.addElement(bit); 

        } 
       } 
       catch (Exception e) 
       { 
        System.out.println(e.toString());       
       } 

       UiApplication.getUiApplication().invokeLater(new Runnable() { 
         public void run() {   
         _list.setSize(image.size()); 
         subManager.add(_list);       
         screen.invalidate(); 
         } 
         }); 


     } 
} 

public void drawListRow(ListField list, Graphics g, int index, int y, int w) { 
    bit = (Bitmap) image.elementAt(index); 
    g.drawBitmap(xText, y + yText, 80, 200, bit, 0, 0); 
} 

но ничего не происходит. Любая идея, комментарии.


Вы правы, я только начал развитие Java 2 недели назад в частности, развитие BB и я попробовать этот link. Я хочу добавить фоновый поток для загрузки изображения после того, как я получил URL-адрес пути из json return.

первой нитки:

_connectionthread = new Connection(); 
_connectionthread.start(); 

private class Connection extends Thread 
{ 
    public Connection() 
    { 
     super(); 
    } 

    public void run() {  
     try {} 
     catch (Exception e) {} 
    } 
} 

второй нитки:

_imgConnectionThread = new ImgConnection(); 
_imgConnectionThread.start(); 

private class ImgConnection extends Thread 
{  
     public ImgConnection() { 
      super(); 
     } 

     public void run() {    
       try { 
       } 
       catch (Exception e) 
       { 
       } 

     } 
} 

как обновить изображения на ListField?

ответ

1

По соглашению имена классов Java начинаются с прописной буквы, поэтому imgConnection действительно должен быть ImgConnection.

В вашем примере кода я не вижу imgConnection, создаваемого где-либо, и я не вижу никакого вызова Thread.start(), который является способом начала потока. Без Thread.start() неудивительно, что ничего не происходит - нить никогда не начинается.

+0

вот мой код: http://pastebin.com/90UKTHzP –

2

Ответ основан на коде из - pastebin.com/90UKTHzP

Грозный код! Это очень трудно читать и недооценивать! Похоже, вы копируете несколько примеров из разных мест. Также вы переопределяете поведение по умолчанию с одинаковым поведением. Также у MainScreen уже есть VerticalManagerField. Также вы добавляете список каждой итерации менеджеру, который вызовет IAE. И основная нить зависит от результата второго. Они запускаются в одно и то же время, но получение json с сервера и его обработка могут занять больше времени, поэтому поток изображений, скорее всего, завершит его запуск без какого-либо результата.

Так что основная рекомендация исправить - читайте clean code book! Узнайте больше о java development - соглашения, многопоточность. Читайте о BB development - UI api, сети.

И, наконец, запустите только один поток, чтобы получить и разобрать json. После того, как вы закончите, запустите другой поток, чтобы получить изображения.

Есть некоторые незначительные вещи, которые также могут сэкономить вам больше времени на батарею и процессор - начните загрузку изображений по требованию - когда они будут нарисованы или будут окрашены (список прокрутки пользователя).