Android端TNetHTTPClient获取JSON失败,求排查线索
问题:Delphi TNetHTTPClient在Android端无法发起请求
我编写了一个从URL获取JSON的函数,在Windows环境测试时运行正常,但将项目打包为APK并部署到Android设备后无法工作,且无任何报错信息。
我的代码:
function TfrMain.getJSON(url: string): TJSONValue; var HttpClient: TNetHTTPClient; strJSON: ansistring; HTTPResult: IHTTPResponse; objJSON: TJSONObject; begin Memo1.Lines.Add('getJSON1'); HttpClient := TNetHTTPClient.Create(self); Memo1.Lines.Add('getJSON2'); try Memo1.Lines.Add(url); HTTPResult := HttpClient.Get(url); Memo1.Lines.Add('getJSON3'); finally HttpClient.Free; end; strJSON := '{"data":' + HTTPResult.ContentAsString() + '}'; Memo1.Lines.Add('getJSON4'); Memo1.Lines.Add(strJSON); objJSON := TJSONObject.ParseJSONValue(strJSON) as TJSONObject; Memo1.Lines.Add('getJSON5'); result := objJSON.Get('data').JsonValue as TJSONArray; Memo1.Lines.Add('getJSON6'); end;
排查情况:
我使用Memo1.Lines.Add进行错误追踪,发现代码在try块内的Memo1.Lines.Add(url);语句处停滞,后续代码均未执行。请问TNetHTTPClient对象在Android端无法正常工作吗?求相关排查线索。
排查线索:
- 权限与明文请求限制:Android 9及以上默认禁止明文HTTP请求,若URL是
http://开头,需在AndroidManifest.xml中添加android:usesCleartextTraffic="true";同时必须确保已添加网络权限:<uses-permission android:name="android.permission.INTERNET" />。 - 主线程阻塞问题:Android不允许在UI主线程发起网络请求,否则会触发ANR(应用无响应)导致卡住。需将网络请求逻辑放到后台线程执行,比如用
TThread.CreateAnonymousThread包裹。 - 完善异常捕获:现有代码未捕获网络请求可能抛出的异常,Android端的异常可能不会直接反馈到UI层。建议在try块内添加except分支捕获并记录异常:
try Memo1.Lines.Add(url); HTTPResult := HttpClient.Get(url); Memo1.Lines.Add('getJSON3'); except on E: Exception do Memo1.Lines.Add('请求异常:' + E.Message); end; - TNetHTTPClient参数配置:Android端可能需要调整超时时间或SSL设置。可尝试设置超时:
HttpClient.ConnectionTimeout := 5000;(5秒);若为HTTPS请求,可临时关闭SSL验证测试(正式环境不建议):HttpClient.SSLOptions.VerifyPeer := False;。 - 网络连通性验证:用Android设备自带浏览器打开目标URL,确认设备能正常访问该地址,排除网络环境、域名解析或服务器防火墙的问题。
内容的提问来源于stack exchange,提问作者Merry Ricard
相关产品推荐
相关产品推荐

