Ошибка в использовании SuperObject в Delphi xe7 android Target
Следующая ошибка возникает при отладке моего проекта путем изменения целевой платформы на Android (SDK.22.3.32 bit)
[Ошибка DCC] superobject.pas(601): E2154 Тип 'TSuperTableString' нуждается в доработке - не допускается в записи варианта
Следующий код работает в Windows без каких-либо проблем, но не при переходе на платформу Android:
procedure TForm1.Button1Click(Sender: TObject);
var jv: TJSONValue;
jo: TJSONObject;
jp: TJSONPair;
ja: TJSONArray;
i: integer;
j: integer;
strString,strValue,strArray:string;
begin
ListBox1.Clear;
RESTRequest1.Execute;
jv:=RESTResponse1.JSONValue;
jo:= TJSONObject.ParseJSONValue(jv.ToString) as TJSONObject;
try
for i := 0 to jo.Count - 1 do
begin
jp := jo.Pairs[i];
if jp.JsonValue is TJSONArray then
begin
ja := jp.JsonValue as TJSONArray;
for j := 0 to ja.Count -1 do
begin
PrintNamesAndValues(ja.Items[j].ToString);
end;
end;
end;
finally
jo.Free;
end;
end;
**
procedure TForm1.PrintNamesAndValues(prmJson:string);
var O:ISuperObject ;
name,email,tod:string;
begin
O := SO(prmJson);
name := O.S['name'];
tod := O.S['email'];
ListBox1.Items.Add(name+'('+email+')');
end;
Есть идеи, каким будет решение? пожалуйста помоги.
Благодарю. / Koul
1 ответ
Суперобъект не поддерживает мобильные платформы. Вам нужен кроссплатформенная вилка x-superobject: https://code.google.com/p/x-superobject/
Ошибка компилятора, о которой вы сообщаете, из-за этого:
FO: record
case TSuperType of
stBoolean: (c_boolean: boolean);
stDouble: (c_double: double);
stCurrency: (c_currency: Currency);
stInt: (c_int: SuperInt);
stObject: (c_object: TSuperTableString);
stArray: (c_array: TSuperArray);
{$IFDEF SUPER_METHOD}
stMethod: (c_method: TSuperMethod);
{$ENDIF}
end;
{.$ifend}
Сейчас, TSuperTableString
это класс. Для настольных компиляторов классы неуправляемы. Для мобильных компиляторов классы являются управляемыми типами, управляемыми с помощью ARC. И управляемые типы не могут появляться в записях вариантов. Отсюда и ошибка только для мобильных компиляторов.
Я уверен, что есть и другие причины, по которым суперобъект не поддерживает мобильные компиляторы. Итак, вместо этого вам нужно использовать x-superobject.
Однако, как я сказал вчера в вашем предыдущем вопросе, встроенный парсер System.JSON
вполне способен проанализировать ваш JSON. Вам не нужно переключаться.