簡體   English   中英

在Delphi XE7 Android Target中使用SuperObject時出錯

[英]Error in using SuperObject in Delphi xe7 android Target

通過將目標平台更改為Android(SDK.22.3.32位)來調試項目時,會發生以下錯誤

[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;

您知道解決方案是什么嗎? 請幫忙。

謝謝。 /考爾

Superobject不支持移動平台。 您需要跨平台前叉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。 無需您切換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM