Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Получение содержимого удалённой страницы


Автор: siiXth 30.12.2012, 10:34
Доброго времени.
Балуюсь на андроид, я вообще полнейший нуб, готовьтесь ;)

Требуется достать контент из ответа по урлу,я очень много перепробовал и наконец сдался.

По готовому шаблону с eclipse в самом конце
Код
protected void onCreate(Bundle savedInstanceState) {

вставил
Код
final TextView tLoad = (TextView) findViewById(R.id.fullscreen_content);
        tLoad.setText(GetPage("http://php.my"));


К выбору "куда вставлять"(как это на яве называется?) притензий быть не может так как 
Код
tLoad.setText("LAKA");
 работает.

После onCreate добавил метод (Код взят http://habrahabr.ru/post/109944/)
Код
public String GetPage(String urlsite)
    {
        String outx= "";
        try
        {
            URL url = new URL(urlsite);
            URLConnection conn = url.openConnection();
            InputStreamReader rd = new InputStreamReader(conn.getInputStream());
            StringBuilder allpage = new StringBuilder();
            return allpage.toString();
        }
        catch (Exception e)
        {
            
        }
        return outx;  
    };


И всё это дело не работает.
Судя по всему, запрос не идёт вообще, так как вышеуказанный домен php.my я поднял на локалхосте и в index.php содержится код
Код
<?php
file_put_contents('1.txt','1.txt');
echo "testvar";
?>


Файл не создаётся , соотв. я не делаю запрос. Ошибок нет вообще.
Что я делаю не так ?
Юзаю всё что сказано поставить http://habrahabr.ru/post/109944/, так же и тестирую.

И да, так же интересуюсь как связь получения-вставки делается на яве. Например вывод сообщений, в ответе php выдаю json, а в приложении декодирую и вставляю?

Спасибо.

Автор: siiXth 30.12.2012, 12:41
после изменения
Код
catch (Exception e)
        {
         System.out.println( e.getMessage() );
        }

приложение вылетает с поп-ап ошибкой
"Unforchantly, PHPRU has stopped" 

А в LogCat много ошибок (http://img195.imageshack.us/img195/39/logcat.jpg) которые ну вообще без понятия как отдебагать, которые к тому же не сохраняются в лог-файл
Что делать дальше?

Автор: dorogoyIV 30.12.2012, 22:10
Цитата(siiXth @  30.12.2012,  10:34 Найти цитируемый пост)

StringBuilder allpage = new StringBuilder();
return allpage.toString();

сначала надо что то залить в строку  smile 

Автор: siiXth 31.12.2012, 18:08
Цитата(dorogoyIV @ 30.12.2012,  22:10)
Цитата(siiXth @  30.12.2012,  10:34 Найти цитируемый пост)

StringBuilder allpage = new StringBuilder();
return allpage.toString();

сначала надо что то залить в строку  smile

Да, знаю что заполнить надо вот так.
Код

StringBuilder allpage = new StringBuilder();
            int n = 0;
            char[] buffer = new char[40000];
            while (n >= 0)
            {
                n = rd.read(buffer, 0, buffer.length);
                if (n > 0)
                {
                    allpage.append(buffer, 0, n);                    
                }
            }


Проблема в другом - как я описал выше, запрос даже не идёт. На локалхосте пхпшка при запросе должна создать файл, а раз она не создаёт, то приложение не делает запрос.
В манифесте дописываю
Код

<uses-permission android:name="android.permission.INTERNET"/>

после /application

Автор: dorogoyIV 31.12.2012, 21:44
Цитата(siiXth @  30.12.2012,  10:34 Найти цитируемый пост)
tLoad.setText(GetPage("http://php.my"));

этот адрес мне не нравится
может быть так?
http://localhost/php.my
хотя фиг его знает, что там у тебя прописано, когда, например, денвером запускаешь виртуальный сервер, по умолчанию надо писать "локалхост"

Автор: siiXth 2.1.2013, 14:48
В общем разобрался
Все дело в том, что strict mode (http://developer.android.com/reference/android/os/StrictMode.html) был включен по умолчанию в Android начиная с версии 3.0. Это значит, что ваше приложение не может обращаться к сети напрямую из основного UI потока, так как это может занимать некоторое время и при этом основной поток блокируется и не отвечает на другие события.
Потому я проюзал AsyncTask, а конкретно пример с получением содержимого странцы который еле откопал - http://www.androidsnippets.com/grab-a-url-source-with-progressdialog-and-asynctask
Ну и приложение просто так не использует хосты(hosts-файл) компа через который выходит в инет, для этого нужно прописывать в хостах устройства, а для этого нужно бить устройство в root, чего я особо делать не собираюсь. Потому поднял просто домен в инете и на нём буду тестить. Немного конечно увеличится параллельная разработка, но не смертельно.

Остаётся вопрос - в каком виде получать данные от сервера. Мой вариант - возвращать json объект который в приложении разбирать. Может юзают что-нибудь другое что для java лучше?

Автор: jk1 3.1.2013, 08:35
Цитата

Остаётся вопрос - в каком виде получать данные от сервера. Мой вариант - возвращать json объект который в приложении разбирать. Может юзают что-нибудь другое что для java лучше?


JSON вполне подойдет, на Java полно библиотек для работы с ним, http://stackoverflow.com/questions/7939632/gson-jackson-in-android

Автор: siiXth 7.1.2013, 02:30
Оукей, теперь вопрос про вставку, покачто теория.
Известно что textview поддерживает хтмл, по крайней мере базовый.
К примеру, мы выводим в приложение новости. Вывыдим через listview каждая новость - новый пункт (верно?).
Вывод самой новости может содержать хтмл и появляется вопрос по поводу вывода картинок.
Вариант 1: через webview - тут всё понятно, пхп даёт в ответ хтмл с картинками и мы просто в listview через webview выводим его
Вариант 2: искать картинки в textview и выводить через ImageGetter - подробнее.
Вопрос: какой вариант лучше?

Автор: siiXth 17.1.2013, 20:57
Ой, простите, но я аппаю =)

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