forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Программирование (http://forum.boolean.name/forumdisplay.php?f=54)
-   -   HTTP (http://forum.boolean.name/showthread.php?t=9121)

-=Jack=- 11.09.2009 18:34

HTTP
 
Собсно следующий код:
Код:

HttpConnection con = (HttpConnection) Connector.open("http://www.google.com/");
вызывает зависание программы. Запускаю под эмулятором, интернет на компе есть, всё должно работать..

Phantom 11.09.2009 18:55

Ответ: HTTP
 
А что идёт после этой строки?

-=Jack=- 11.09.2009 19:00

Ответ: HTTP
 
Вот весь код этого метода:
Код:

try {
                HttpConnection con = (HttpConnection) Connector.open("http://www.google.com:80/");
                InputStream is = con.openInputStream();
                long len = con.getLength();
                int ch = 0;
                char[] r = new char[300];
                if(len!=-1){
                    for(int i = 0;i<len;i++)
                        if((ch = is.read())!= -1) r[i] = (char)ch;
                }
                else {
                    int i = 0;
                    while ((ch = is.read()) != -1){
                        r[i] = (char) ch;
                        i++;
                    }
                }
                is.close();
                con.close();
                TransText.setString(new String(r));
            } catch (IOException ex) {
                ex.printStackTrace();
            }

При этом вылазит вопрос "разрешить доступ к инету?" и что не нежимай - ничего не даёт...

Хм, только что заметил, что программа виснет не после того, как я подтверждаю доступ к инету, а именно на запросе доступа... Может нужно открывать подключение в отдельном потоке? Или может ещё что-то нужно прописать перед первой строкой?

Скачал 2 примера реализиции HTTP-подключения, с ними такой же трабл... А вот скачал Opera mini, запустил на эмуляторе - работает нормально, не виснет на запросе...

-=Jack=- 11.09.2009 19:43

Ответ: HTTP
 
Нет, проблема не в коде а в его размещении. Если я пишу этот код в startApp - всё отлично работает, а в commandAction(где он мне и нужен) - не хочет...

Phantom 11.09.2009 20:54

Ответ: HTTP
 
Ну если ты этот код размещаешь в конструкторе, startApp или commandAction,то он себя на разных телефонах и эмуляторах может вести вообще непредсказуемо. Заводи новый поток и всё будет работать.

-=Jack=- 11.09.2009 21:11

Ответ: HTTP
 
Спасибо, попробую...

-=Jack=- 11.09.2009 21:31

Ответ: HTTP
 
Всёровно поток виснет на строке подключения...
Код:

public class Trans extends Thread {
    public void run(){
        try {
            HttpConnection con = (HttpConnection) Connector.open("http://www.google.com:80/");
            InputStream is = con.openInputStream();
            long len = con.getLength();
            int ch = 0;
            char[] r = new char[300];
            if (len != -1) {
                for (int i = 0; i < len; i++) {
                    if ((ch = is.read()) != -1) {
                        r[i] = (char) ch;
                    }
                }
            } else {
                int i = 0;
                while ((ch = is.read()) != -1) {
                    r[i] = (char) ch;
                    i++;
                }
            }
            is.close();
            con.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    public Trans(){
        super();
        start();
    }
}


Phantom 11.09.2009 21:59

Ответ: HTTP
 
Скинь скомпиленный Jar

-=Jack=- 11.09.2009 23:39

Ответ: HTTP
 
Вложений: 1
Вот:

Phantom 12.09.2009 00:19

Ответ: HTTP
 
Ой что-то хз. У меня мидлет вылетает при попытке "Перевести". Даже не виснет, а именно вылетает.

ViNT 12.09.2009 02:20

Ответ: HTTP
 
Цитата:

HttpConnection con = (HttpConnection) Connector.open("http://www.google.com:80/");
Попробуй не указывать порт (вроде для http и так 80 по умолчанию) и убрать "/" в конце адреса.

-=Jack=- 12.09.2009 11:44

Ответ: HTTP
 
Цитата:

Сообщение от Phantom (Сообщение 118310)
Ой что-то хз. У меня мидлет вылетает при попытке "Перевести". Даже не виснет, а именно вылетает.

Если не ввести ничего в текстовое поле и нажать "Перевести", должен вылетать алерт. Да и программа не виснет, я ведь создаю подключение в отдельном потоке. Только через отладку заметно, что поток стопорится на этой строке. Я это хотел ещё вчера в мой пост добавить, но инет вырубился...

Цитата:

Сообщение от Vint
Попробуй не указывать порт (вроде для http и так 80 по умолчанию) и убрать "/" в конце адреса.

Пробовал.. Да тут не может быть ошибки, ведь если я пишу этот же код в startApp, он отлично работает...

-=Jack=- 13.09.2009 19:21

Ответ: HTTP
 
Хм, странно, пошёл под линукс - заработало... Спасибо за помощь ;)

odd 02.10.2009 18:55

Ответ: HTTP
 
По-моему проблема в банальном переполнении массива.
Ответ сервера считывается в массив размером всего 300 байт,
а ответ там будет явно побольше, чем 300 байт.

-=Jack=- 03.10.2009 00:34

Ответ: HTTP
 
Программа висла на строке подключения, а не при чтении. Да и, похоже, проблема была с компилятором под виндой.


Часовой пояс GMT +4, время: 02:21.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot