Flutter调用WordPress REST API导致Android模拟器崩溃求助
解决Flutter Android模拟器调用WordPress REST API崩溃问题
先修正代码中的拼写错误
你的请求头里Content-Type存在拼写错误,正确写法应为application/json,这个问题可能导致服务端解析请求异常:
headers: <String, String>{ 'Authorization': basicAuth, 'Content-Type': 'application/json; charset=UTF-8' // 修正拼写错误 });
针对SocketException(errno=103)的解决方案
该错误表示连接被中止,结合Android模拟器环境,按以下步骤排查修复:
1. 确认Android网络权限
在android/app/src/main/AndroidManifest.xml中添加必要的网络权限,放在<application>标签之前:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
同时检查模拟器系统设置,确保没有禁用应用的网络访问权限,也未开启飞行模式。
2. 测试模拟器网络连通性
打开模拟器自带的浏览器,直接访问你的API地址https://myrestapii.liara.run/wp-json/wp/v2/posts/6:
- 如果无法访问,说明模拟器网络本身存在问题,尝试重启模拟器或切换网络模式(如从Wi-Fi切换到虚拟蜂窝网络)。
- 如果能正常返回数据,再回到Flutter应用进行调试。
3. 处理SSL证书信任问题
若你的WordPress站点使用自签名SSL证书,Android默认会拒绝连接,可通过自定义HttpClient临时信任证书(仅适用于测试环境):
import 'dart:io'; import 'package:http/http.dart' as http; Future<Post> fetchPost() async { var basicAuth = 'Basic *****'; // 创建信任所有证书的HttpClient(生产环境请勿使用) HttpClient client = HttpClient() ..badCertificateCallback = ((X509Certificate cert, String host, int port) => true); var response = await http.get( Uri.https('myrestapii.liara.run', 'wp-json/wp/v2/posts/6'), headers: <String, String>{ 'Authorization': basicAuth, 'Content-Type': 'application/json; charset=UTF-8' }, ).timeout(const Duration(seconds: 10)); // 添加超时限制,避免应用卡住 if (response.statusCode == 200) { return Post.fromjson(jsonDecode(response.body)); } else { throw Exception('failed to load post!'); } }
生产环境请配置合法的SSL证书,避免安全风险。
4. 捕获异常避免应用崩溃
原代码未处理网络异常,导致未捕获的Exception直接引发崩溃。在调用fetchPost的逻辑中添加try-catch:
try { Post post = await fetchPost(); // 处理获取到的数据 } catch (e) { print('加载失败:$e'); // 给用户显示友好的错误提示 }
5. 验证Basic Auth的正确性
确保basicAuth是正确的Base64编码字符串,格式为Basic 用户名:密码的Base64编码,可通过在线工具验证编码是否正确,避免因认证失败导致服务端中止连接。
关于crash_dump权限提示
failed to attach to thread 182: Permission denied属于调试工具的权限问题,和应用崩溃本身无关,解决上述网络问题后该提示会自动消失。
内容的提问来源于stack exchange,提问作者Hana.HD
相关产品推荐
相关产品推荐

