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
相关产品推荐
相关产品推荐

