【问题标题】:Blackberry Thread Image from JSON来自 JSON 的黑莓线程图像
【发布时间】:2012-06-10 22:35:14
【问题描述】:

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

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

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

但不能在整个列表中平滑滚动,并且they 说不要在 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);
}

但什么也没发生。任何想法,cmets。


你说得对,我两周前才开始 Java 开发,尤其是 BB 开发,我尝试了这个link。从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 上的图片?

【问题讨论】:

    标签: multithreading image blackberry bitmap listfield


    【解决方案1】:

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

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

    所以主要建议修复它 - 阅读clean code book!阅读有关 java development 的更多信息 - 约定、多线程。了解BB development - UI api,网络。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多