|
0 / 0 / 0
Регистрация: 16.08.2016
Сообщений: 14
|
|||||||||||||||||||||
Java. Delphi, idHttp. URLConnection. Post22.01.2020, 17:51. Показов 2001. Ответов 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-й еррор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|