Евгений Корепов
-
Постов
738 -
Зарегистрирован
-
Посещение
-
Победитель дней
100
Сообщения, опубликованные Евгений Корепов
-
-
-
-
50 минут назад, Martifan сказал:
в контроле то есть когда удаляю 123 с помощью кнопки, контролер очищается, но когда хочу написать 456 автоматом впереди добавляется 123 и получается 123456
Сделал тестовое приложение (чистый андроид 9, Rio), но не удалось воспроизвести такое поведение.
Закиньте проект в котором глюк воспроизводится.
-
-
Не очень понятно где именно вы видите 123456, в самом контроле или в помощнике клавиатуры?
-
1 час назад, ivyl сказал:
И сколько Вам платят за рекламу?
У меня из 5 устройств ни одного Кся, но все Виндой прекрасно определяются.
К сожалению нисколько. Тут просто здравый смысл - вы приобретаете телефон хорошего качества, с нормальной гарантией и сервисом. Программа Android One гарантирует вам обновления (ежемесячные обновления и обновления OS) - это значит что устройство сможет помогать вам в разработке не один год. В последствии вы сможете продать устройство за приемлемые деньги, а не за 300 рублей (как раз по такой цене я распродал мусор Dexp купленный изначально, 4 года назад, по неопытности). Вот и все аргументы, никакого скрытого умысла.
P.S. Добавлю - один из телефонов Dexp взорвался у меня прямо на столе. Чудом не сгорел рабочий кабинет, но часть рабочих бумаг погорело, слава богу все само потухло. Меня на месте в этот момент не было, телефон был подключен к компу - до этого занимался отладкой одного из приложений. Телефон превратился в оплавленный комок пластмассы. ))
-
18 минут назад, Ingalime сказал:
А не было ли у вас ситуации, что вы купили устройство с андроид, а вот подружить его со студией не удалось. Не видит его студия и все...
Если можно ваши конкретные модели (название/номер), что используються в вашем стенде при разработке под андроид в последней версии студии.
Спасибо.
Это происходит в основном или с русским ребрендингом, где пытаются скрыть настоящего производителя аппарата с помощью программный заглушек. Типа Dexp и прочий мусор. Или с контрафактной китайщиной без IMEI.
Тут не студия не видит, а винда не понимает что к ней подключили. Обычно решается поиском на китайских форумах подходящих дров.
Просто покупайте любой Xiaomi c Android One (чистый андроид). Его вы всегда сможете использовать по назначению для себя/семьи или продать.
Или покупайте любой, в нормальном магазине - если что то не заработает, вернете в течении двух недель со словами "Его цвет не походит к моим глазам" )))
-
16 минут назад, Tumaso сказал:
Xiaomi тоже скоро лишат доступа к экосистеме андроида, по примеру хуавея
Это вряд ли. Да и по хуавею уже на попятную пошли, ибо без редкоземельных металлов, штатам придется вернутся к плантациям и неграм-рабам. ))))
-
Я бы переделал и код отправки и код приема.
При отправке вы выполняете лишние действия, проверяете наличие интернет, преобразуете json в лист.
Отправка любым способом желательна в виде "Ключ=Значение", чтоб на стороне сервера корректно распознать данные.
Вот отправка POST (добавьте в uses System.Net.Mime):
function TForm1.PostURL(const aurl, json: string): string; var AHTTPClient : THTTPClient; AHttpResponse: IHttpResponse; ASource: TMultipartFormData; begin result:= ''; AHTTPClient:= THTTPClient.Create; ASource:=TMultipartFormData.Create(); ASource.AddField('request', json); try try AHttpResponse := AHTTPClient.Post(aurl, ASource); if AHttpResponse.StatusCode <> 200 then Result := AHttpResponse.StatusText else Result := AHttpResponse.ContentAsString(); except on E: exception do ShowMessage('Ошибка сети: '+E.Message); end; finally FreeAndNil(ASource); FreeAndNil(AHTTPClient); end; end;
Но гораздо проще и быстрее делать GET (добавьте в uses System.NetEncoding):
function TForm1.GetURL(const aurl, json: string): string; var AHTTPClient : THTTPClient; AHttpResponse: IHttpResponse; AEncodedJSON : String; begin result:= ''; AHTTPClient:= THTTPClient.Create; AEncodedJSON:=System.NetEncoding.TURLEncoding.URL.Encode(json); try try AHttpResponse := AHTTPClient.Get(aurl + '?request=' + AEncodedJSON); if AHttpResponse.StatusCode <> 200 then Result := AHttpResponse.StatusText else Result := AHttpResponse.ContentAsString(); except on E: exception do ShowMessage('Ошибка сети: '+E.Message); end; finally FreeAndNil(AHTTPClient); end; end;
file_get_contents("php://input", "r") - это тоже вариант, но никогда такое не используйте.
На стороне сервера, в php есть специальные глобальные переменные для получения данных $_REQUEST, $_POST и $_GET.
$_POST и $_GET - для соответствующих HTTP методов. $_REQUEST - универсальный.
Вот вам код php для сервера, я там описал вспомогательную функцию лога MyLog, измените путь логов на свой.
<?php @ini_set("display_errors", "1"); error_reporting(E_ALL); //@ini_set("display_errors", "0"); error_reporting(0); function MyLog($Title, $Value = "", $Debug = false) { $LogFile = "/var/log/service/test001.log"; if (is_array($Title)) $Title = "\n".print_r($Title, true)."\n"; if (is_array($Value)) $Value = "\n".print_r($Value, true)."\n"; $Message = date("Y.m.d H:i:s")." ".$Title.$Value."\r\n"; if ($Debug) echo $Message; file_put_contents($LogFile, $Message, FILE_APPEND); } // Проверяем наличие параметра request if (!isset($_REQUEST["request"])) { echo "Нет параметров"; return; } // Декодируем строку из $_REQUEST["request"] в массив $RequesrArray = json_decode($_REQUEST["request"], true); // Проверяем прошло ли декодирование нормально if (!isset($RequesrArray)) { echo "Ошибочный JSON"; return; } MyLog('*************************************************************************************************************************'); MyLog('$_REQUEST:', $_REQUEST); MyLog('$_POST:', $_POST); MyLog('$_GET:', $_GET); MyLog('$RequesrArray:', $RequesrArray); // Работаем с массивом $RequesrArray $lessongrid_type = $RequesrArray['lessongrid_type']; $schedule0 = $RequesrArray['schedule'][0];
Обратите внимание json_decode($_REQUEST["request"], true); используется с вторым параметром true - при этом создается не объект (медленно), а ассоциативный массив (быстрее некуда).
Вот код Delphi
procedure TForm1.FormCreate(Sender: TObject); Var AURL : String; AJSON : String; begin AURL:='http://myserver.ru/api/test001.php'; AJSON:='{"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]}'; PostURL(AURL, AJSON); GetURL(AURL, AJSON); end;
А вот логи на стороне сервера:
2019.06.06 13:29:13 ************************************************************************************************************************* 2019.06.06 13:29:13 $_REQUEST: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $_POST: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $_GET: Array ( ) 2019.06.06 13:29:13 $RequesrArray: Array ( [lessongrid_idpartner] => 2 [lessongrid_type] => 0 [lessongrid_idpointcity] => 1 [lessongrid_iddircourses] => 1 [lessongrid_idteacher] => 1 [schedule] => Array ( [0] => 0:00 [1] => 5:00 [2] => 0:00 [3] => 0:00 [4] => 0:00 [5] => 0:00 [6] => 0:00 ) ) 2019.06.06 13:29:13 ************************************************************************************************************************* 2019.06.06 13:29:13 $_REQUEST: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $_POST: Array ( ) 2019.06.06 13:29:13 $_GET: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $RequesrArray: Array ( [lessongrid_idpartner] => 2 [lessongrid_type] => 0 [lessongrid_idpointcity] => 1 [lessongrid_iddircourses] => 1 [lessongrid_idteacher] => 1 [schedule] => Array ( [0] => 0:00 [1] => 5:00 [2] => 0:00 [3] => 0:00 [4] => 0:00 [5] => 0:00 [6] => 0:00 ) )
Как видите можно использовать код с $_REQUEST в обоих случаях.
Вот итоговый код php
<?php @ini_set("display_errors", "1"); error_reporting(E_ALL); //@ini_set("display_errors", "0"); error_reporting(0); // Проверяем наличие параметра request if (!isset($_REQUEST["request"])) { echo "Нет параметров"; return; } // Декодируем строку из $_REQUEST["request"] в массив $RequesrArray = json_decode($_REQUEST["request"], true); // Проверяем прошло ли декодирование нормально if (!isset($RequesrArray)) { echo "Ошибочный JSON"; return; } // Работаем с массивом $RequesrArray $lessongrid_type = $RequesrArray['lessongrid_type']; $schedule0 = $RequesrArray['schedule'][0];
-
Покупайте любой телефон с андроидом посвежее (потому как в последней версии студии на андроиде < 5 вы ничего уже не запустите).
И обязательно берите чистый аднроид, никаких HTC, Samsung, Xiaomi с их мега-облочками.
Вот к примеру Xiaomi A1 - модель с чистым андроидом, вполне себе средний телефон, не дорого.
-
Одно из основных требований протокола REST - отсутствия состояния. Т.е. сервер ничего не должен хранить: запрос от клиента, ответ от сервера, все. Никаких сессий и прочей мути.
То что у вас на данный момент реализовано - велосипедный костыль, поэтому никакие стандартные фреймворки с этим работать не будут.
P.S. Прочитал ваше сообщение внимательнее - все верно у вас работает.
"НО! после любого обращения по REST, сервер создает и уничтожает сразу класс ServerMethod" - вот так и должно быть.
-
-
2 часа назад, qz5 сказал:
Ну как? Смогли интегрировать Appodeal и delphi? Тоже хочу попробовать.
Нет, я забил, Google admob вполне справляется
-
Продукты Apple не умеют корректно декодировать URL. Это исключительно ваша задача. Все другие платформы делают это автоматически.
Вам нужно добавить код:
uses System.NetEncoding; ... URL:='http://blabla.com/php/pay2.php?eks=' + System.NetEncoding.TURLEncoding.URL.Encode('блабла&sum=100&hash=блабла&orderid=205');
-
Зайдите в Менеджер лицензий (в меню Help) и убедитесь что у вас активирована лицензия именно на "Delphi 10.3 Rio Professional with Mobile".
Если нет, то повторная регистрация поможет.
-
Я уже поднимал эту тему, поищите по AndroidTV, но тоже не смог побороть проблему. Проблема вроде именно в FMX, где то в исходниках даже видел некий массив "разрешенных" кнопок. Но занимался этим эпизодически, потом вообще забил. Если докопаетесь до истины - будет хорошо.
-
Мимо проходил. Вот вам код на php (собираем все данные в один массив и энкодим в json)
$QueryArray = array( "SELECT ... FROM `...`;", "SELECT ... FROM `...`;", "SELECT ... FROM `...`;", "SELECT ... FROM `...`;", ); $Index = 0; $ResultArray = array(); foreach ($QueryArray as $query) { if ($mysqli_result = mysqli_query($DBLink, $query)) while ($row = mysqli_fetch_array($mysqli_result, MYSQLI_ASSOC)) $ResultArray[$Index][] = $row; $Index++; } $ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); echo $ResultJSON;
-
1 час назад, Tumaso сказал:
Я пару лет назад работал с делфовской оберткой www.delphiffmpeg.com для ffmpeg, делал приложение для windows/mac os. Там все работает идеально, можно извращаться (в хорошем смысле этого слова) не только с изображениями, но и видео и аудио. Но поддержки linux в этой библиотеке (delphiffmpeg.com) нет до сих пор.
Вообще сейчас пытаюсь адаптировать Vampyre Imaging Library для использования в Rio, эта текущая версия библиотеки во freepascal поддерживает Linux , а в делфи нет. Проблема в том, что разработчик использует собственный вариант ZLib, а также использует LongInt, у которого размерность на разных системах разная (в частности в 64-битном linux он 8ми байтовый).
Можно просто вызывать как внешнее приложение с нужными параметрами. Я к примеру на сервере Asterisk на лету пережимаю wav в ogg таким образом - все работает превосходно.
Если не хотите использовать внешнее приложение, то у ffmpeg отличная документация, в том числе и по работе с вызовами функций из библиотек, так что дополнительная прокладка в виде компонента может и не понадобиться. В линуксе же можно подключать библиотеки so, по аналогии с windows dll ? Тут мои знания и опыт очень ограничены, но предполагаю что нет ничего не возможного )))
-
Как вариант - можете использовать внешнее приложение https://ffmpeg.org/ . И вроде можно использовать его библиотеки в своем приложении (но тут не скажу, не пробовал).
-
4 часа назад, Bob32 сказал:
руки дошли только сегодня и то пока криво )
файл нашел, скопировал в директорию проекта, и там отредактировал.
но этот файл IdGlobalProtocols.pas - это не в чистом виде модуль библиотеки Indi.
Что значит "add the edited file to your project"? просто списать в каталог проекта - этого вероятно будет недостаточно )
Просто закиньте в паку с проектом, этого думаю достаточно.
P.S. для проверки напечатайте какую нибудь явную ересь в этом файле - если компилер ругнется на ошибку, значит он нужный файл подключает к проекту.
-
-
50 минут назад, Bob32 сказал:
Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе.
Сейчас показывает 7:27, а должно 13:27
Какая версия среды у вас и какая версия Indy? Возможно проблема в старой версии Indy, погуглите "delphi indy OffsetFromUTC" - там были какие то проблемы, и вроде они исправлены.
У меня вот такая версия (в Rio с последним апдейтом). Узнать версию - киньте любой компонент Indy на форму, правой кнопкой по компоненту и About.
Повторюсь - на андроиде я не проверял правильность работы.
-
28 минут назад, Bob32 сказал:
Стоял левый часовой пояс в настройках телефона. Поставил московский -время изменилось но, снова не в том часовом поясе.
Сейчас показывает 7:27, а должно 13:27
Посмотрите исходники модуля IdSNTP - там все достаточно просто (всего 300 строк кода). Может пошаговый дебаг поможет понять откуда берется ошибка. На винде у меня правильное время отдает, на андроиде не пробовал.
-
1 минуту назад, Letos сказал:
Например, на Спектруме было 1 байт - 8 пикселей
Я приводил вам пример работы скроллинга, а не спецификацию.
как очистить память клавиатуры
в Android
Опубликовано
Пытался понять как работает TClearEditButton у TEdit - она очищает клавиатуру нормально. Но понять и адаптировать к TMemo не смог ))))