代码之家  ›  专栏  ›  技术社区  ›  mtmurdock

黑莓:下载和显示.jpg图像

  •  0
  • mtmurdock  · 技术社区  · 14 年前

    我正在尝试从服务器上提取.jpg图像,并将其显示为和 EncodedImage 在一个 ZoomScreen . 因为这个.jpg文件可能非常大,所以我想把.jpg文件保存到一个文件中,然后从文件中读取它,这样我就不会把整个文件都留在内存中了。

    我面临的问题是connector.open(“http.url.com/file.jpg”)正在抛出 IOException 消息“错误的套接字ID”,或者它正在引发 ClassCastException 当我试图打开 FileConnection 指向URL。下面是我尝试过的一个例子:

        try {
            FileConnection fileIn = (FileConnection)Connector.open(fileURL);
            FileConnection fileOut = (FileConnection)Connector.open(fileDest);
    
            if(!fileOut.exists())
                fileOut.create();
    
            InputStream is = fileIn.openInputStream();
            OutputStream os = fileOut.openOutputStream();
    
            while(fileIn.canRead() && fileOut.canWrite()){
                os.write(is.read());
            }
    
            is.close();
            os.close();
    
            fileIn.close();
            fileOut.close();
    
            EncodedImage image = EncodedImage.getEncodedImageResource(fileDest);
    
            UiApplication.getUiApplication().pushScreen(new ZoomScreen(image));
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    我大部分都是从RIM那里得到的,但我遗漏了一些东西。我知道URL是正确的,因为当我从同一个服务器传输音频时使用相同的格式。当我尝试连接到服务器时,在第一行引发了异常。

    有人对此有经验吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   mtmurdock    14 年前

    try {
        HttpConnection conn = (HttpConnection) Connector.open(fileURL);
        InputStream fileIn = conn.openInputStream();
    
        ByteArrayOutputStream os = new ByteArrayOutputStream();
    
        for(int i = fileIn.read(); i > -1; i = fileIn.read()){
            os.write(i);
        }
    
        byte[] data = os.toByteArray();
    
        EncodedImage image = EncodedImage.createEncodedImage(data, 0, data.length);
    
        UiApplication.getUiApplication().pushScreen(new ZoomScreen(image));
    
    } catch (Exception e) {
        e.printStackTrace();
    }
    

        2
  •  1
  •   user664338    13 年前
    public void run(){
        try{
            StreamConnection streamC = (StreamConnection) Connector.open(url+";deviceside=true");
            InputStream in = streamC.openInputStream();
    
            byte[] data = new byte[4096];
            data = IOUtilities.streamToBytes(in);
            in.close();
                EncodedImage eImage = EncodedImage.createEncodedImage(data, 0, data.length);
            }
        catch(Exception e)
            {
                e.printStackTrace();
            }