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

JSON на андроид ошибка


Razmir

Вопрос

 

Второй день бьюсь, не могу понять в чем причина, надо спарсить данные с JSON, на винде все работает, на андроид вылетает ошибка - Acces violation at addres BAEDD64C, accessing address 0000000D.

Использовал 2 варианта, родной System.JSON и XSuperObject:

Вариант 1:
JSON := TJSONObject.ParseJSONValue(JSONText) as TJSONObject;
JSONArray := TJSONArray(JSON.Get('c').JsonValue);

Вариант 2:

JSON:=TSuperObject.Create;
JSON:= SO(JSONText);

Ошибки вылетают на последних строчках. В чем может быть проблема? Спасибо.

Изменено пользователем Razmir
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

все как обычно, данные дайте посмотреть

и о каких последних строчках идет речь? 

по идее в первом примере должно быть 

JSON := TJSONObject.ParseJSONValue(JSONText) as TJSONObject;
JSONArray := JSON.Get('c').JsonValue as TJSONArray;

а во втором

JSON:= SO(JSONText);

и все

Ссылка на комментарий
  • 0
3 часа назад, krapotkin сказал:

все как обычно, данные дайте посмотреть

{"n":"2","c":[{"A":"F23","B":"Up","C":"5LLL"},{"A":"F12","B":"Down","C":"5LLF"},{"A":"F23","B":"Up","C":"3LLF"},{"A":"F48","B":"Up","C":"57LF"},{"A":"F15","B":"Down","C":"GLL5"}]}

3 часа назад, krapotkin сказал:

и о каких последних строчках идет речь?

2 варианта, в каждом по 2 строчки, вторые строчки являются последними

 

3 часа назад, krapotkin сказал:

JSON := TJSONObject.ParseJSONValue(JSONText) as TJSONObject;
JSONArray := JSON.Get('c').JsonValue as TJSONArray;

а во втором


JSON:= SO(JSONText);

и все

Без разницы. Так же, под виндой работает, под андроид вылетает ошибка

Ссылка на комментарий
  • 0
procedure TForm1.btn1Click(Sender: TObject);
var
  X:ISuperObject;
begin
  x:=SO(m1.Lines.Text);
  m1.Lines.Text := x.AsJSON(true);
end;

проверил код на Win 64 и Android 10 @ Honor 10x lite

все работает прекрасно

Delphi 10.4.1

Ссылка на комментарий
  • 0

 

1 минуту назад, krapotkin сказал:

procedure TForm1.btn1Click(Sender: TObject);
var
  X:ISuperObject;
begin
  x:=SO(m1.Lines.Text);
  m1.Lines.Text := x.AsJSON(true);
end;

проверил код на Win 64 и Android 10 @ Honor 10x lite

все работает прекрасно

Delphi 10.4.1

Похоже понял в чем проблема, выше сократил данные для удобства восприятия, на самом деле гораздо длиннее. Нашел ваше:

нужно забыть про передачу бинарников через string и использовать параметры TDBXStreamValue

Вставил короткий вариант и он заработал. Я так понял, что проблема в том, что JSON больше 32кб. Но не понял как использовать TDBXStreamValue, ищу сейчас инфу

Ссылка на комментарий
  • 0
Только что, krapotkin сказал:

а откуда берется JSON? и как на андроиде появился DBX-чего-то там

Получается с сайта.

Function TForm3.GetUTF8Page(URL: String):UTF8String;
Var
  Stream: TStream;
Begin
  Stream:=TMemoryStream.Create;
  Try
    NetHTTPClient1.Get(URL, Stream);
    Stream.Position:=0;
    SetLength(Result, Stream.Size);
    Stream.Read(Result[1], Stream.Size);
    Result:=UTF8ToString(Result);
  Finally
    Stream.Free;
  End;
End;

procedure TForm3.Button1Click(Sender: TObject);
begin

 JSONText:=GetUTF8Page('https://*******');

JSON:=SO(JSONText);'

.............................................................

end;

Про  DBX сам не понимаю, это было в вашем ответе, касаемо JSON, ну и проверил, действительно короткий вариант работает

Ссылка на комментарий
  • 0

Ох как же я затупил ?‍♂️ ведь ларчик просто открывался. Оказывается проблема вообще не в JSON, на андроид почему то приходит GET запрос с дополнительным символом, из за него то и вылетает. Тема закрыта, спасибо.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...