|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
|||||||||||||||||||||
Java. Delphi, idHttp. URLConnection. Post22.01.2020, 17:51. Показов 1989. Ответов 12
Всех приветствую. Вопрос в следующем. Нужно портировать функцию из Delphi в Java. Вроде все написал. Хотя, скорее всего, и не без огрехов. Но вопрос больше в том, что строчка:
Вопроса, как вы, уважаемые форумчане, поняли, 2: 1. Даст ли мне код на JAVA результат аналогичный коду на Delphi и если нет, то почему? 2. Что не так со строчкой InputStreamReader, почему она приводит к вылету приложения? В Java относительно новый, просто рабочая задача стоит сделать из Desktop-приложения Android-приложение Код на Delphi:
0
|
|||||||||||||||||||||
| 22.01.2020, 17:51 | |
|
Ответы с готовыми решениями:
12
Android. Java. Delphi, idHttp. URLConnection. Post IdHttp::Post() idHTTP.post |
|
Модератор
|
|
| 22.01.2020, 18:32 | |
|
Ну вообще для андроида есть отдельный раздел. Отвечу в силу своих знаний соединений.
Второй вариант выглядит лучше. С каким исключением вылетает? IO достаточно широкий класс. И getMessage замените на printStackTrace или как то так. Сейчас про первый вариант. Я смотрю у вас пост запрос. Так вот, передавать данные для пост надо до получения кода ответа или инпутстрима, так как после его можно читать. setDoInput не нужен совсем, а setDoOutput только для пост, для гет не нужно, для пост еще тип задайте connection.setRequestType("POST"); (вроде так, добуквенно не помню). И попробуйте использовать Http(s)URLConnection вместо просто УРЛ. Соединение надо закрывать после завершения. Вариант отправки данных для поста connection.getOutputStream().write(aPara ms.getBytes("UTF-8"));
1
|
|
|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
|||||||||||
| 23.01.2020, 11:40 [ТС] | |||||||||||
|
alecss131, немного поправил первую версию согласно вашим рекомендациям. Получилось следующее:
Комментирование строки решает вылет приложения, но результат я, естественно, не получаю. Хоть убейте, не понимаю, что с ней не так
0
|
|||||||||||
|
Модератор
|
|||||||||||
| 23.01.2020, 12:13 | |||||||||||
|
А что Вы (именно Вы) подразумеваете под переменной AParams? Просто в коде подразумевается что это входные данные для запроса, ведь это входной параметр метода. Для получения ответа надо использовать не OutputStream соединения а InputStream.
У меня на компе вот этот код отрабатывает без ошибок. Только стоит добавить проверку на null при вызове данного метода
Вот пример использования.
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
||||||
| 23.01.2020, 15:22 [ТС] | ||||||
|
alecss131, теперь все выглядит интереснее. Приложение не выкидывает, но ответ получает с ошибкой. Покопавшись встал следующий вопрос. AParams - не пустой и можно ли без кодировок в bytes Data отправлять запрос на сайт?
Грубо говоря. SendHTTP все параметры перекидывает на AParams и вот можно ли AParams без вот этого:
0
|
||||||
|
Модератор
|
|||||||||||
| 23.01.2020, 16:03 | |||||||||||
|
Если в AParams будут не юникод символы (чтото помимо англ букв и цифр со спец символами) то без указания кодировки сервер получит кашу.
Можно так сделать:
Если нету исключений то ошибка определенно в способе авторизации, структура кода отработана не раз, работает к примеру с яндекс метрикой и яндекс переводчиком, с другими апи на этом форуме не помогал никому.
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
||||||
| 23.01.2020, 16:06 [ТС] | ||||||
|
alecss131, ответ приходит даже не null, а просто пустой. при этом AParams содержит явный спектр параметров, но я так понимаю, что после кодировки в byte сервер получает не то, что ожидает увидеть.
В случае с делфи, если конечно idHttp Post чего то не мудрит, сервер получает параметры AParams. По крайней мере здесь я не вижу кодировки в Byte:
0
|
||||||
|
Модератор
|
||||||
| 23.01.2020, 16:55 | ||||||
|
Попробуйте тогда другой метод получения строки из потока
А как вы себе еще представляете способ передачи строки без преобразовывания в байты? Тут скорее не кодировка а преобразование строки в байты. И изза этого проблем быть не может. А что у вас за апи? Может так станет яснее.
1
|
||||||
|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
|
| 23.01.2020, 17:35 [ТС] | |
|
alecss131, этот вариант тоже не сработал
![]() По вопросу АПИ смогу сориентировать завтра, программист, ответственный за сайт, ушел уже Добавлено через 29 минут alecss131, а передачи строки регламентирована какой-то длиной символов? строка AParams имеет длину 138 символов. Byte - если этот byte имеет размерность от -128 до 127. Но вдруг есть тут затык
0
|
|
|
Модератор
|
|
| 23.01.2020, 18:03 | |
|
Там берутся байты из символов строки и если используется кодировка к примеру utf-8 то байты будут в этой кодировке и все программы понимающие юникод поймут эти байты. Тип байт имеет размер 1 байт. А то что тип байт еще и числа от -127 до 128 тут не важно. Да и там же массив байт будет. Еще как понимаю в заголовке content-length длинна тела запроса как раз в байтах а не символах, и длинна строки в байтах не всегда равна длинне в символах. data[] это как раз массив длинны которой ему присвоят.
Если есть доступ к сайту то можете глянуть то что от вас приходит. Можете попробовать поставить декстопный jdk на комп и подебажить метод на нем. Единственное что мне кажется что это могут быть особенности андроида. Можете сразу а можете после проверки на компе в джаве. А вообще на этом форуме есть раздел для андроида и там джава тоже. Вы немного разделом ошиблись. Хотя по сути язык один и вряд ли так сильно различаются.
1
|
|
|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
||||||
| 24.01.2020, 09:38 [ТС] | ||||||
|
alecss131, и, все-таки, пока не пересоздал вопрос на форуме - информация получилась следующая:
Ответ к сайту либо не доходит, либо доходит, но ответ не декодируется. Решил вывести информацию по code и получил следующее: он не равен 200, переменная, в которую пытаюсь записать - показывает 0. Отследил момент, до какой строки доходим и почему 0 - получил следующее: После этой строки
Я могу попробовать бросить 3 функции, которые мне нужно, чтобы отработали, в отдельное java - пк-приложение и посмотреть, будет ли тоже самое или это особенность андроида. Но сам факт, что почему то после этой строчки - исключение. На телефоне именно я не могу его проследить. Поля исключений на телефоне в приложении не отображаются
0
|
||||||
|
Модератор
|
|
| 24.01.2020, 10:07 | |
|
Странно, у меня на компе отрабатывает без проблем и так, пост на мой сервак проходит. Куда еще можно пост сделать не знаю поэтому пробовал на свой)))
Еще заметил что везде пишу немного иначе. Сначала идет setDoOutput потом setRequestType потом все заголовки, включая длинну а только в конце (перед кодом ответа) пишу в OutputStream. Строку в массив байт не важно когда, главное знать размер массива до указания заголовка и иметь массив до записи его в запрос. То есть в моем примере по строчкам 12,9,4-8,15 а 14 перед 16. И зачем такое долгое ожидание? Там стандартный таймаут вроде чтото около 10с, в любом случае (если сервак не как мой после 30мин неактивности засыпает и первое обращение после засыпания может длиться секунд 10-15) можно не трогать таймауты. Если не поможет то значит особенности андроида, я немного поизучал андроид и удивился что его нативные программы на джаве, правда вм у него своя. Если будете на компе пробовать то выше 8 не стоит брать (чем выше тем больше костылей при переходе на андроид как понял).
1
|
|
|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
|
| 24.01.2020, 11:05 [ТС] | |
|
alecss131, пересобрал проект на пк. Все отработало без проблем. Интересное кино
Ладно, тогда прыгаем в тему с Android`ом, ахаха
0
|
|
| 24.01.2020, 11:05 | |
|
Помогаю со студенческими работами здесь
13
IdHTTP (POST запрос) Idhttp json post IdHTTP Post запросы Перехват исключения IdHTTP (post) idhttp post 500-й еррор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|