Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > SE HttpConnection ConnectionNotFoundException


Автор: kanemara 23.12.2009, 19:05
Телефон Sony Ericsson K750, мидлет должен просто открыть HttpConnection и забрать картинку, но вместо этого выпадает ConnectionNotFoundException.
Пробовал разные урлы, пробовал даже протсто коннектиться на урл с html и читать ее, результат тот же.
На эмуляторе все отлично, на Nokia e51 тоже.
Инет настроен правильно, сокетное соединение работает нормально. Пробовал даже на разных операторах.
Может кто сталкивался с чем-то подобным? Зарание благодарен.

Код

public void requestImage(final String path, ImageReceivedListener listener) {
        imageReceivedListener = listener;
        final StringBuffer b = new StringBuffer();
        new Thread() {
            public void run() {
                try {                    
                    connection = (HttpConnection) Connector.open("http://iwatcher.net/shot/751ddeee16286ea33cf1a30e10c80e0b/a4cc9bb02ccf4b07ce181fc08d3a3a60-320x600.png");
                    connection.setRequestMethod(HttpConnection.GET);
                    connection.setRequestProperty("Accept", "image/png");
                    connection.setRequestProperty("Connection", "close");
                   
                    if (connection.getResponseCode() == HttpConnection.HTTP_OK) {
                        is = connection.openInputStream();
                        
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        int c;
                        while ((c = is.read()) != -1) {
                            baos.write(c);
                        }
                        baos.close();
                        res = baos.toByteArray();
                       
                    }

                } catch (IOException e) {
                 
                    String s = e.toString();
                    b.append(s.substring(s.length() / 2).toLowerCase());

                } finally {
                    if (is != null) {
                        try {
                            is.close();
                        } catch (IOException e) {
                            //do nothing
                        }
                    }
                    if (connection != null) {
                        try {
                            connection.close();
                        } catch (IOException e) {
                            //do nothing
                        }
                    }
                    if (imageReceivedListener != null) {
                        imageReceivedListener.imageReceived(res, b.toString());
                    }
                }
            }
        }.start();
    }


Автор: W0LF 23.12.2009, 23:46
а попробуй убрать вот эти вот проперти - 
Код

                    connection.setRequestProperty("Accept", "image/png");
                    connection.setRequestProperty("Connection", "close");

Автор: kanemara 24.12.2009, 00:38
Уже пробовал. Не помогло. Пробовал на другом таком же телефоне - тот же результат.

Автор: ivanovpv 24.12.2009, 08:44
Нельзя так читать - ожидая в конце буфера -1. Надо запрашивать размер буфера:
Код

long len = 0 ;
int ch = 0;
c = (HttpConnection)Connector.open(url);
is = c.openInputStream();
len =c.getLength();
if( len != -1) {
    // читаем заданную длину буфера
    for(int i =0 ; i < len ; i++ )
      if((ch = is.read()) != -1) {
          b.append((char) ch);
       }
}


Если сервер возвращает длину буфера, то -1 в конце буфера может никогда и не появиться.

Автор: W0LF 24.12.2009, 14:46
а я 3 года читал из http без len и нигде проблем не было =)

Автор: kanemara 24.12.2009, 17:44
 В общем проблема решена.
В коде ошибок нет, он нормально работает.
Перезаказал настройки у оператора, http заработал, а сокеты перестали. Так как нужно чтобы приложение могло открыть оба вида соединения, то пришлось экспериментировать с настройками... но в конце концов результат получен))
Всем спасибо за участие.

Автор: ivanovpv 25.12.2009, 08:40
Цитата(W0LF @  24.12.2009,  14:46 Найти цитируемый пост)
а я 3 года читал из http без len и нигде проблем не было =)

Ну а что мешает прочитать len - лень? smile - хуже точно не будет. По крайней мере в мануале девелоперов сонерика настоятельно рекомендуется читать len!

Автор: W0LF 25.12.2009, 14:10
 smile 
Цитата(ivanovpv @  25.12.2009,  08:40 Найти цитируемый пост)
лень? smile

хороший программист - ленивый программист =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)