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

Flutter调用CoinAPI获取BTC汇率遇Failed host lookup错误求助

解决CoinAPI获取BTC兑USD汇率时的Failed host lookup错误

核心原因排查与解决方案

Failed host lookup本质是域名解析失败或网络请求无法正常发起,以下是针对性解决步骤:

1. 补全应用网络权限

Flutter应用默认无网络访问权限,需手动配置:

  • Android:在android/app/src/main/AndroidManifest.xml中添加权限代码:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • iOS:在ios/Runner/Info.plist中添加ATS配置(若API为HTTPS可简化,但若域名存在证书问题需开启):
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

2. 校验CoinAPI请求地址

确保请求URL完全正确,CoinAPI v1的汇率端点格式为:

https://rest.coinapi.io/v1/exchangerate/BTC/USD?apikey=你的API_KEY

需注意:

  • 必须以https://开头(HTTP请求会被iOS ATS拦截)
  • 域名拼写为rest.coinapi.io,无错别字
  • 携带有效API Key(需在CoinAPI官网注册获取免费额度)

3. 排查设备网络环境

  • 确认测试设备(真机/模拟器)已连接可用WiFi/蜂窝网络
  • 关闭可能拦截请求的VPN、代理或防火墙
  • 模拟器可尝试重置网络设置后重启

4. 修正代码中的请求逻辑

确保网络请求代码无错误,以下是标准示例:

coin_data.dart

import 'package:http/http.dart' as http;
import 'dart:convert';

class CoinData {
  final String _apiKey = "你的API_KEY";

  Future<double> fetchBTCtoUSDRate() async {
    final uri = Uri.parse(
        "https://rest.coinapi.io/v1/exchangerate/BTC/USD?apikey=$_apiKey");
    final response = await http.get(uri);

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      return data["rate"];
    } else {
      throw Exception("请求失败:${response.statusCode}");
    }
  }
}

price_screen.dart

import 'package:flutter/material.dart';
import 'coin_data.dart';

class PriceScreen extends StatefulWidget {
  const PriceScreen({super.key});

  @override
  State<PriceScreen> createState() => _PriceScreenState();
}

class _PriceScreenState extends State<PriceScreen> {
  final CoinData _coinData = CoinData();
  double? _btcToUsdRate;
  String _errorMsg = "";

  @override
  void initState() {
    super.initState();
    _loadExchangeRate();
  }

  void _loadExchangeRate() async {
    try {
      final rate = await _coinData.fetchBTCtoUSDRate();
      setState(() {
        _btcToUsdRate = rate;
      });
    } catch (e) {
      setState(() {
        _errorMsg = e.toString();
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("BTC 兑 USD 汇率")),
      body: Center(
        child: _btcToUsdRate != null
            ? Text(
                "1 BTC = \$${_btcToUsdRate!.toStringAsFixed(2)}",
                style: const TextStyle(fontSize: 24),
              )
            : _errorMsg.isNotEmpty
                ? Text("加载失败:$_errorMsg")
                : const CircularProgressIndicator(),
      ),
    );
  }
}

验证流程

  1. 用浏览器/Postman直接请求API地址,确认能返回有效数据
  2. 打印代码中的请求URL,检查是否与测试地址一致
  3. 重新编译应用,测试网络请求是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:55:21