You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi Alexandria 11.2安卓端TJSONObject.AddPair失效问题求助

Delphi Alexandria 11.2 安卓端JSON构建空值问题排查

核心排查步骤

  • 先确认FMX组件文本的有效性:安卓调试时直接输出组件的Text属性值,比如用ShowMessage(Edit1.Text),确认组件确实有可读取的文本内容——安卓端FMX组件的文本初始化、编码处理和Windows有差异,可能存在组件文本为空但你没察觉的情况。
  • 显式创建JSON字符串对象:避免隐式转换可能带来的编码问题,改用TJSONString包裹组件文本后再添加到JSON对象,代码示例:
    var
      vJSON: TJSONObject;
    begin
      vJSON := TJSONObject.Create;
      try
        // 显式创建TJSONString,避免安卓端隐式转换异常
        vJSON.AddPair('username', TJSONString.Create(Edit_Username.Text));
        vJSON.AddPair('email', TJSONString.Create(Edit_Email.Text));
        ShowMessage(vJSON.ToString);
      finally
        vJSON.Free;
      end;
    end;
    
  • 测试极简无FMX依赖的JSON代码:剥离FMX组件,直接硬编码字符串测试AddPair是否正常,代码示例:
    var
      vJSON: TJSONObject;
    begin
      vJSON := TJSONObject.Create;
      try
        vJSON.AddPair('test_key', 'test_value');
        ShowMessage(vJSON.ToString);
      finally
        vJSON.Free;
      end;
    end;
    
    如果这段代码能正常输出{"test_key":"test_value"},说明AddPair本身没问题,问题出在FMX组件文本的读取环节。
  • 检查JSON对象的生命周期:安卓端内存回收机制更严格,确保vJSON在调用ToString前没有被意外释放,比如不要在局部作用域中提前释放对象,或者用TJSONValue引用持有对象。
  • 注意平台的JSON空值表现差异:安卓端TJSONObject.ToString在对象为空(无任何有效键值对)时会返回空字符串,而Windows端会返回{},这是平台实现差异,不是bug——先确认你添加的键值对是否真的被成功写入。

内容的提问来源于stack exchange,提问作者Hamza KAABECHE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:02:02