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

Flutter项目调用Swagger API遇Failed host lookup错误求助

问题排查与解决方案

错误核心分析

Failed host lookup: 'admin.sports.com.kg' 本质是DNS解析失败,程序无法找到目标域名对应的服务器地址,常见诱因包括服务端故障、网络权限缺失、协议限制等。

分步排查与修复

1. 验证API服务可用性

  • 直接在浏览器或终端执行 curl http://admin.sports.com.kg/api/sports_areas,检查是否能正常返回JSON数据
  • 同步测试Swagger地址:如果Swagger页面也无法访问,说明服务器可能下线、域名过期或IP变更,需联系API提供者确认服务状态

2. 补全网络权限配置

Android端

在android/app/src/main/AndroidManifest.xml中,确保添加互联网权限声明:

<uses-permission android:name="android.permission.INTERNET" />

iOS端

由于项目使用HTTP协议,iOS默认会拦截非HTTPS请求,需在ios/Runner/Info.plist中添加例外配置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

如果API支持HTTPS,优先改用HTTPS地址,可避免上述配置

3. 完善代码异常处理

原代码未捕获网络请求异常,导致出现未处理崩溃。修改RemoteService类,添加错误捕获与资源自动管理:

import 'dart:async';
import 'dart:convert';
import 'package:untitled/models/post.dart';
import 'package:http/http.dart' as http;

class RemoteService {
  Future<List<Result>?> getPosts() async {
    // 使用withClient自动管理客户端资源,避免内存泄漏
    return await http.Client().withClient((client) async {
      try {
        var uri = Uri.parse('http://admin.sports.com.kg/api/sports_areas');
        // 添加超时限制,防止无限等待
        var response = await client.get(uri).timeout(const Duration(seconds: 10));

        if (response.statusCode == 200) {
          final parsed = json.decode(response.body) as Map<String, dynamic>;
          return parsed['results'].map<Result>((e) => Result.fromJson(e)).toList();
        } else {
          print('请求失败,状态码:${response.statusCode}');
          return null;
        }
      } catch (e) {
        // 捕获DNS解析、连接超时等所有网络异常
        print('网络请求错误:$e');
        return null;
      }
    });
  }
}

4. 优化主页状态管理

在getData方法中,无论请求成功或失败,都要更新状态避免加载指示器持续显示:

void getData() async {
  _stadiums = await RemoteService().getPosts();
  setState(() {
    isLoaded = true;
  });
  // 可选:若_stadiums为null,可在UI中添加错误提示组件
}

额外优化建议

  • 优先切换到HTTPS协议:HTTP存在安全风险,且在现代移动系统中限制较多,若API支持HTTPS,将地址改为https://admin.sports.com.kg/api/sports_areas
  • 增加重试机制:针对临时网络波动,可添加有限次数的请求重试逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18