Форум программистов, компьютерный форум CyberForum.ru

Передача HTML как строки из Андроида на сервер - Android

Восстановить пароль Регистрация
Другие темы раздела
Android Cursor Android Studio http://www.cyberforum.ru/android-dev/thread1798317.html
Здравствуйте, я начал изучать андроид совсем недавно, добрался до базы данных SQLite. Проблема такая (ниже код): public class MainActivity extends AppCompatActivity implements View.OnClickListener { String my_Log = "myLog"; String strani = {"Россия", "Беларусь", "Украина", "Болгария", "США", "Китай"}; int people = {100, 120, 80, 600, 572, 110}; String region = {"Европа",...
Android Создание приложения для сайта на Android Есть у меня простенький сайт новостей. Слышал , что можно сделать приложению для сайта на Андроид. Где можно прочитать про это? Дайте пожалуйста ссылку на видеоурок, или на книгу, статью. Все что можно , чтобы я мог больше узнать про это дайте пожалуйста) Мне надо, чтобы приложение осуществляло те же функции что и сайт. Ну там вывод новостей, добавление комментарии к новостям, личный кабинет и... http://www.cyberforum.ru/android-dev/thread1798307.html
Использование консольных команд в приложении Android
Всем привет!!! Вопрос такого плана. При использовании adb shell на компе команда logcat -b events | grep am_ результа меня устраивает, но используя на устройстве в приложении "Терминал" результат совсем другой и информация выводимая меня не устраивает. Может я что-то упустил? :umnik:
Android Удаление файла
Люди помогите разобраться. Как удалить старый файл или стереть в нем инфу перед новой записью? private void writeFile(String queD) throws IOException { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter (openFileOutput(FILENAME,MODE_PRIVATE|MODE_APPEND))); writer.write(queD); writer.flush(); writer.close();
Android Основы ORMLite http://www.cyberforum.ru/android-dev/thread1798069.html
Гуру, кто-нибудь подобным пользуется??? Обьясните "на пальцах" что такое ORMLite и чем оно облегчает работу??? Раньше для этих задач использовал ОЧЕНЬ СЛОЖНЫЙ "самопал" - не все случаи учтены, возможны мелкие ошибки... Сейчас хочу попробовать выучить нормальные/современны технологии, но не знаю с какой стороны подойти и есть ли подобные технологии вообще... Задача: 1) создать КЛАСС, в...
Android Как получить context MainActivity в Service? В MainActivity создаю сервис и startService( SER );, как получить context MainActivity в сервисе, чтобы можно было манипулировать view? подробнее

Показать сообщение отдельно
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
27.08.2016, 06:11  [ТС]     Передача HTML как строки из Андроида на сервер
Цитата Сообщение от vxg Посмотреть сообщение
покажите где же в вашем клиентском коде идет отправка переменной html
Вот мой код, комменты внутри
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
    String html; // переменная активити для строки с кодом html страницы для парсинга
    
    
    ServerTaskWeb taskRequest = new ServerTaskWeb();
    taskRequest.execute(new String[]{webUrl}); // webUrl - адрес страницы сайта для парсинга
 
    private class ServerTaskWeb extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            android.os.Debug.waitForDebugger();
            String response = "";
 
            for (String urlStr : urls) {
                //use URLConnection
                try {
                    URL url = new URL(urlStr);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setUseCaches(false);
                    urlConnection.setDoInput(true);
                    urlConnection.setDoOutput(true);
 
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String s = "";
                    while ((s = bufferedReader.readLine()) != null) {
                        response += s;
                    }
                    bufferedReader.close();
 
                    urlConnection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return response;
        }
 
        @Override
        protected void onPostExecute(String result) {
            html = result; // строка html страниц сайта для парсинга
            TextView note = (TextView)findViewById(R.id.scanNoteReq);
            note.setText(html); // вывод на экран приложения полученной строки. Все выводится в текстовом виде правильно
            // передаем строку для парсинга на сервер и ждем ответа
            ServerTaskMyServer taskSendServer = new ServerTaskMyServer();
            taskSendServer.execute(new String[]{"веб адрес скрипта на моем сервере"});
        }
    }
 
    private class ServerTaskMyServer extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            String response = "";
            sendPost = "h=" + html; // строка с кодом html страницы для передачи методом POST
            for (String urlStr : urls) {
                //use URLConnection
                try {
                    URL url = new URL(urlStr);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("POST");
                    urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    urlConnection.setRequestProperty("Content-Length", "" +
                            Integer.toString(sendPost.getBytes().length));
                    urlConnection.setRequestProperty("Content-Language", "en-US");
                    urlConnection.setUseCaches(false);
                    urlConnection.setDoInput(true);
                    urlConnection.setDoOutput(true);
 
                    DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
                    wr.writeBytes(sendPost);
                    wr.flush();
                    wr.close();
 
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                    String s = "";
                    while ((s = bufferedReader.readLine()) != null) {
                        response += s;
                    }
                    bufferedReader.close();
 
                    urlConnection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
 
 
            return response;
        }
 
        @Override
        protected void onPostExecute(String result) {
            TextView note = (TextView)findViewById(R.id.scanNoteReq);
            note.setText(result); // вывод на экран приложения ответа от сервера
        }
    }
Если я принудительно задаю значение переменной html, например, Hello, world!, то все отрабатывает отлично. А вот при html-коде на сервер ничего не передается.

Добавлено через 18 минут
Еще обнаружил, что при отправке методом POST строки с кириллицей, например банальной "Привет, мир!" происходит тоже самое - строка не передается на сервер.

Добавлено через 6 часов 27 минут
Причину проблемы нашел, осталось найти решение

Приложение не могло отправить код html в виде POST по причине кодировки. Дело в том, что в андроиде используется однобайтная кодировка, поэтому английские фразы проходили отлично. А кириллица и ряд других символов используют двухбайтную кодировку utf. Когда я убрал строчку
Java
1
2
urlConnection.setRequestProperty("Content-Length", "" +
                            Integer.toString(sendPost.getBytes().length));
то запросы стали уходить, но проблема с кириллицей осталась.

Да, для отправки кода html в виде строки POST пришлось предварительно очищать от тегов с помощью
Java
1
html = Html.fromHtml(result).toString();
У кого-нибудь есть мысли насчет того, как корректно передать кириллицу? Сейчас из-за однобайтного года получаю неверный результат. Сообразить не могу, так как на моих часах 4.43 утра

Добавлено через 1 час 24 минуты
остался последний шаг

Дошло, что надо использовать URLEncoder.encode, но тут вылезла еще одна проблемка.
Когда использую так
Java
1
URLEncoder.encode("Вася Пупкин");
то все работает великолепно. Однако в таком виде это deprecated, рекомендуется такая конструкция
Java
1
2
3
4
5
6
7
           try {
                phrase = URLEncoder.encode(("Вася Пупкин"), "utf-8");
 
                return phrase;
            } catch (UnsupportedEncodingException e) {
 
            }
Логично, но тут подвох. Вместо "Васи Пупкина" я получаю набор в виде %D0%92...
Пишу в студии, кодировка стоит utf-8

Добавлено через 3 минуты
На всякий случай полный скрипт на моем сервере
PHP
1
2
3
4
5
6
7
<?php
header('Content-type: text/html; charset=utf-8');
 
echo $_POST['h'];
 
exit;
?>
 
Текущее время: 14:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru