Deserialize JSON with fpjsonrtti lazarus / 43-Android ---------------------------------------------------------------------- bsod · 2024-11-29 12:59 I am a beginner with lamw and i need to deserialize JSON to a Objecj using fpjsonrtti. But when i use the code below the android app close. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i         LReader := TJSONDeStreamer.Create( nil );    try      LReader.Options := [jdoCaseInsensitive];      LReader.JSONToObject( strJSON {String with JSON data}, FList {Object with TCollection} );    finally      LReader.Free;    end;  Any suggestions? ---------------------------------------------------------------------- dseligo · 2024-11-29 13:20 Did you create FList somewhere (and free it afterwords)? Something like: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i type TYourObject = class(TPersistent) // or something like that......    LReader := TJSONDeStreamer.Create( nil );FList := TYourObject.Create;    try      LReader.Options := [jdoCaseInsensitive];      LReader.JSONToObject( strJSON {String with JSON data}, FList {Object with TCollection} );    finally      LReader.Free;    end;...FList.Free; ---------------------------------------------------------------------- bsod · 2024-11-29 13:56 Hi dseligo, It seems to me that we cannot create a variable in the private session of TAndroidModule. If i use a local variable i can deserialize the object. But I need the FList variable to be accessed in more areas of the code. ---------------------------------------------------------------------- dseligo · 2024-11-29 14:58 By 'TAndroidModule' you mean descendant of the class jForm? Like this below? Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i type   { TAndroidModule1 }   TAndroidModule1 = class(jForm) You can have variable in private section (I have it there and it's working). Maybe you didn't create your form, and you try to use variables in it. P.S.: I now see that you wrote private session. Did you mean 'section', or session? If later, what do you mean by private session? ---------------------------------------------------------------------- bsod · 2024-11-29 15:16 For example Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i    TAndroidModule2 = class(jForm)    btnBuscar: jButton;    procedure btnBuscarClick(Sender: TObject);  private    {private declarations}  FList:TClientes;  public    {public declarations}  end;  procedure TAndroidModule2.AndroidModule2Create(Sender: TObject);begin  FList := TClientes.Create;end; procedure TAndroidModule2.AndroidModule2Destroy(Sender: TObject);begin    FList.Free;  end; procedure TAndroidModule2.btnBuscarClick(Sender: TObject);begin     if not Assigned(FList) then      FList.Create;     LReader := TJSONDeStreamer.Create( nil );    try      LReader.Options := [jdoCaseInsensitive];      LReader.JSONToObject( strJSON {String with JSON data}, FList {FList dont Assigned} );    finally      LReader.Free;    end; end; ---------------------------------------------------------------------- dseligo · 2024-11-29 15:25 I think that OnCreate event doesn't work in LAMW. Put this code in 'OnActivityCreate' event: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure TAndroidModule2.AndroidModule2Create(Sender: TObject);begin  FList := TClientes.Create;end; This is wrong (you need to assign to FList, with :=): Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i     if not Assigned(FList) then      FList.Create; It should be like this: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i     if not Assigned(FList) then      FList := TClientes.Create;