Blackberry: скачать и отобразить изображение .jpg - PullRequest
0 голосов
/ 29 октября 2010

Я пытаюсь извлечь изображение .jpg с сервера и отобразить его как EncodedImage в ZoomScreen. Поскольку этот .jpg может быть очень большим, я хочу сохранить .jpg в файл и прочитать его оттуда, чтобы у меня не осталось всего этого в памяти.

Проблема, с которой я сталкиваюсь, заключается в том, что Connector.open ("http.url.com/file.jpg") либо выдает IOException с сообщением "Bad Socket 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 ]

1 голос
/ 23 марта 2011
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();
        }
1 голос
/ 29 октября 2010

Разобрался.

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();
}

Я надеюсь, что другие люди найдут это полезным.

...