Перейти к содержанию
Fire Monkey от А до Я

Barbanel

Пользователи
  • Постов

    414
  • Зарегистрирован

  • Посещение

  • Победитель дней

    36

Активность репутации

  1. Like
    Barbanel отреагировална Vitaldj в Версия андроид   
    Нееет, там полная ...опа. Я помучался пару дней и купил дешманский андроид))
  2. Thanks
    Barbanel отреагировална Евгений Корепов в Передача и прием JSON в PHP   
    Я бы переделал и код отправки и код приема.
    При отправке вы выполняете лишние действия, проверяете наличие интернет, преобразуете 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];  
  3. Like
    Barbanel получил реакцию от Ingalime в Версия андроид   
    Никто ведь не собирается удаленно у нескольких миллионов пользователей выпиливать ОС со всеми личными данными.
    Даже если и сольют, на существующих устройствах все еще можно разрабатывать и тестировать под Андроид 6, 7, 8, 9
    Но новые функции очевидно не протестировать, да.
    Хотя о чем мы, эмба и новые функции - понятия полярные)))
  4. Like
    Barbanel отреагировална Евгений Корепов в Версия андроид   
    Покупайте любой телефон с андроидом посвежее (потому как в последней версии студии на андроиде < 5 вы ничего уже не запустите). 
    И обязательно берите чистый аднроид, никаких HTC, Samsung, Xiaomi с их мега-облочками.
    Вот к примеру Xiaomi A1 - модель с чистым андроидом, вполне себе средний телефон, не дорого.
  5. Like
    Barbanel отреагировална Sergionn в Не могу выложить программу в гугл магазин   
    пообещали в бете 10.4, т.е. если разработчик на комьюнити или на лечении, то тогда ждет до релиза в конце 2019((,
    как бы с такими сроками все во флаттер не ушли, окончательно((
  6. Like
    Barbanel получил реакцию от Ingalime в Не могу выложить программу в гугл магазин   
    Тут написано что вам нужно скомпилировать приложение также и для 64битных платформ.
    Сделайте это, и будет вам счастье ?
  7. Like
    Barbanel отреагировална Евгений Корепов в Непонятная ситуация в Webbrowser   
    Продукты Apple не умеют корректно декодировать URL. Это исключительно ваша задача. Все другие платформы делают это автоматически.
    Вам нужно добавить код:
    uses System.NetEncoding; ... URL:='http://blabla.com/php/pay2.php?eks=' + System.NetEncoding.TURLEncoding.URL.Encode('блабла&sum=100&hash=блабла&orderid=205');  
  8. Like
    Barbanel отреагировална Ra72 в Мобильная разработка на Delphi 10.3 (Professional)   
    Да, ответили следующее: Сделать Update лицензии, если "...with Mobile" не появилось, тогда удалить лицензию и повторно зарегистрировать.
    Update мне не помог, а вот удаление лицензии в License Manager-е и регистрация заново - помогло.
     
  9. Like
    Barbanel отреагировална Dmitry Stolyarov в Разбор JSON с мультизапросом   
    krapotkin, спасибо!
    Публикую, может кому-то пригодится..
    на стороне PHP:
    $query1 = "SELECT ... FROM `...`;"; $query2 = "SELECT ... FROM `...`;"; $query3 = "SELECT ... FROM `...`;"; $query4 = "SELECT ... FROM `...`;"; function GetValuesAsJson($query, $Link) { if ($DBResult = mysqli_query($Link, $query)) { $ResultArray = array(); $Index = 0; while ($row = mysqli_fetch_array($DBResult, MYSQLI_ASSOC)) { $ResultArray[$Index] = $row; $Index++; } $ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); return $ResultJSON; mysqli_free_result($DBResult); } }; echo '{"Arr1":'. GetValuesAsJson($query1, $DBLink).', "Arr2":'.GetValuesAsJson($query2, $DBLink).', "Arr3":'.GetValuesAsJson($query3, $DBLink).', "Arr4":'.GetValuesAsJson($query4, $DBLink).'}'; mysqli_close($DBLink); на стороне delphi:
    xJS := SO(aJSON); with xJS.A['Arr1'] do // имя массива begin for j := 0 to length - 1 do begin xObj := O[j]; Memo1.Lines.Add(xObj.S['cities_name']); // собираем нужные данные ... end;  
  10. Like
    Barbanel отреагировална krapotkin в Разбор JSON с мультизапросом   
    вы просто без разделителей склеиваете три разных JSON-массива
    вам бы каждый из них описать отдельно. да и вообще принято логически законченные участки кода выделять в отдельные функции
    function GetValuesAsJson($query) {   ..... } тогда будет например
    '{"Arr1":'. GetValuesAsJson($query1). ',  "Arr2":'.GetValuesAsJson($query2).', "Arr3":'.GetValuesAsJson($query3).'}' ну и разбор полученного объекта например с помощью XSuperObject. Примеры есть на офсайте https://github.com/onryldz/x-superobject
  11. Like
    Barbanel получил реакцию от Ingalime в переход к x64?   
    Для андроида? Нет.
    Здесь https://codematters.online/embarcadero-august-2018-product-roadmap-part-1/ утверждается что компилятор будет готов к лету:
     
  12. Like
    Barbanel получил реакцию от Ingalime в Мобильная разработка на Delphi 10.3 (Professional)   
    Правый клик по узлу Target Platforms -> Add Platform.
  13. Like
    Barbanel получил реакцию от Ingalime в "Column index 1 out of bound" но не все так просто как может показаться...Нужна помощь или совет...   
    Не сталкивался.
    Решение в лоб: забекапь .dproj и .deployproj и удали их, это обнулит настройки проекта.
    После этого зайди в настройки проекта и настрой все заново.
  14. Like
    Barbanel получил реакцию от Tumaso в "Column index 1 out of bound" но не все так просто как может показаться...Нужна помощь или совет...   
    Не сталкивался.
    Решение в лоб: забекапь .dproj и .deployproj и удали их, это обнулит настройки проекта.
    После этого зайди в настройки проекта и настрой все заново.
  15. Like
    Barbanel получил реакцию от Tumaso в "Column index 1 out of bound" но не все так просто как может показаться...Нужна помощь или совет...   
    Пишем в данный момент на 10.3.1, в т.ч. под iOS.
    Перед этим писали на всех версиях начиная с Берлина.
    Live bindings не используем, т.к. наслышаны про его странное поведение.
    Да, больше писанины, но и уверенности что все работает именно так как нужно - тоже больше.
    Да, вы можете отказаться от "сырой" студии, без проблем, никто не запрещает.
    Но есть шанс что вы путаете теплое с мягким - студию в целом с одним глючным решением.
  16. Like
    Barbanel получил реакцию от Ingalime в "Column index 1 out of bound" но не все так просто как может показаться...Нужна помощь или совет...   
    Пишем в данный момент на 10.3.1, в т.ч. под iOS.
    Перед этим писали на всех версиях начиная с Берлина.
    Live bindings не используем, т.к. наслышаны про его странное поведение.
    Да, больше писанины, но и уверенности что все работает именно так как нужно - тоже больше.
    Да, вы можете отказаться от "сырой" студии, без проблем, никто не запрещает.
    Но есть шанс что вы путаете теплое с мягким - студию в целом с одним глючным решением.
  17. Like
    Barbanel получил реакцию от Евгений Корепов в Идентификация устройства   
    Всем доброго времени!
    Как и обещал, выкладываю либы для работы с KeyChain.
    Либы были взяты у братьев-китайцев, ни слова про покупку сказано не было (хотя чтобы выкачать их пришлось заплатить какому-то облачному сервису).
    Использовать просто, за все отвечают три функции: 
    function StoreItemToKeychain(const AServiceName, AKey, AValue: string; const bOverride: Boolean=True): Boolean; function GetItemValueFromKeychain(const AServiceName, AKey: string): string; function DeleteItemFromKeychain(const AServiceName, AKey: string): Boolean; Ну и традиционно нужно подключить саму библиотеку, все находится в аттаче.
    Enjoy! ?
    iOS_KeyChain.zip
  18. Like
    Barbanel отреагировална Alexander Samosyuk в TRectangle3D   
    Решилось установкой XE 10.3 Rio. По другому в XE10.2.3 не работает
  19. Like
    Barbanel отреагировална Равиль Зарипов (ZuBy) в GIT - как с ним наиболее просто работать   
    если нужно чтобы проекты были в гите и секьюрно, то можно воспользоваться решением от atlassian.
    купить продукт Server, развернуть на любом сервере. стартер пак - 10$ на 10 человек 
  20. Like
    Barbanel отреагировална Tumaso в GIT - как с ним наиболее просто работать   
    @Barbanel
    вот неплохое описание, как в Git делать Pull Request в существующем проекте
  21. Like
    Barbanel отреагировална mazayhin в Пути к ресурсам андройд   
    Вот статья, что куда деплоить надо, и как получить доступ к этому
    http://delphifmandroid.blogspot.com/2014/02/deployment-manager.html
  22. Like
    Barbanel отреагировална dnekrasov в Создание ссылки из TLabel.   
    Просто надо привыкнуть к новому подходу к некоторым вещам. Зато возможностей побольше, чем в VCL. Да и удобнее, когда привыкнешь. ИМХО
  23. Like
    Barbanel получил реакцию от #WAMACO в Андроид. Обучение пользователя новым функциям приложения   
    В аттаче пример того как я себе представляю такую реализацию. Будем использовать в нашем проекте.
    Буду рад критике, предложениям, и все такое.

    TestWhatsNew.zip
  24. Like
    Barbanel отреагировална OnePeople в Андроид. Обучение пользователя новым функциям приложения   
    Тоже свой вариант по быстрому накидал, как пример
    WhatNew.rar
  25. Like
    Barbanel получил реакцию от OnePeople в Андроид. Обучение пользователя новым функциям приложения   
    В аттаче пример того как я себе представляю такую реализацию. Будем использовать в нашем проекте.
    Буду рад критике, предложениям, и все такое.

    TestWhatsNew.zip
×
×
  • Создать...