0

我正在寻找一种从后台线程在我的 ListField 上显示图像的方法。首先在我的 drawListRow 我试试这个

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

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

但不能流畅地滚动整个列表,并且他们说不要在 UI 上进行联网或其他阻塞操作。但我也试试这个

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 开发,特别是 BB 开发,我尝试了这个链接。从 json 返回的路径 url 后,我想添加一个后台线程来下载图像。

第一个线程:

_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 上的图像?

4

2 回答 2

2

答案基于来自 - pastebin.com/90UKTHzP 的代码

可怕的代码!真的很难阅读和理解!看起来您从不同位置复制粘贴了几个示例。您还使用相同的行为覆盖默认行为。MainScreen 也已经有了 VerticalManagerField。此外,您还将列表每次迭代添加到管理器,这将导致 IAE。主线程取决于第二线程的结果。它们同时开始,但是从服务器获取 json 并处理它可能需要更长的时间,所以图像线程很可能会在没有任何结果的情况下完成他的运行。

所以主要建议修复它 - 阅读干净的代码书!阅读有关Java 开发的更多信息- 约定、多线程。阅读BB 开发- UI api,网络。

最后 - 只启动一个线程来获取和解析 json。完成后 - 启动另一个线程以获取图像。

有一些小事情也可以为您节省更多电池和处理器时间 - 开始按需加载图像 - 何时绘制或将要绘制(用户滚动列表)。

于 2012-06-10T07:25:45.660 回答
1

按照惯例,Java 类名以大写字母开头,因此 imgConnection 应该是 ImgConnection。

在您的示例代码中,我没有看到 imgConnection 在任何地方被实例化,也没有看到对 Thread.start() 的任何调用,这是我启动线程的方式。没有 Thread.start() 没有任何事情发生也就不足为奇了——线程永远不会启动。

于 2012-06-10T00:00:10.820 回答