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

Flutter世界时间App在Android Studio中运行时错误求助

Flutter世界时间App运行时错误排查与解决

问题描述

开发一款基于worldtimeapi的Flutter世界时间App,能正常获取API输出,但始终存在运行时错误。已在build.gradle中添加依赖,确认API与HTTP协议正常,推测问题出在系统配置。

代码片段(loading.dart)

import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart';

class Loading extends StatefulWidget {
  const Loading({Key? key}) : super(key: key);

  @override
  State<Loading> createState() => _LoadingState();
}

class _LoadingState extends State<Loading> {

  void getTime() async{

    // Make the request using http.get
    Response response = await get(Uri.http('worldtimeapi.org', '/api/timezone/Asia/Karachi'));
    Map<String, dynamic> data = jsonDecode(response.body);
    print(data);

    // Get properties from data
    String datetime = data['datetime'];
    String offset = data['utc_offset'];
    print(datetime);
    print(offset);

    // Create DateTime object
    DateTime now = DateTime.parse(datetime);
    print(now);
  }

  @override
  void initState() {
    super.initState();
    getTime(); // Async func
    print('hey there!');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Text('loading screen'),
    );
  }
}

错误日志片段

E/AndroidRuntime(22278):    
E/AndroidRuntime(22457):    at android.app.ActivityThread.installProvider(ActivityThread.java:7754)
E/AndroidRuntime(22457):    at android.app.ActivityThread.acquireProvider(ActivityThread.java:7352)
E/AndroidRuntime(22457):    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:3668)
E/AndroidRuntime(22457):    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2542)
E/AndroidRuntime(22457):    at android.content.ContentResolver.query(ContentResolver.java:1213)
E/AndroidRuntime(22457):    at android.content.ContentResolver.query(ContentResolver.java:1161)
E/AndroidRuntime(22457):    at android.content.ContentResolver.query(ContentResolver.java:1117)
E/AndroidRuntime(22457):    at cmkx.k(:com.google.android.gms@231818044@23.18.18 (190400-535401451):2)
E/AndroidRuntime(22457):    at cmkx.l(:com.google.android.gms@231818044@23.18.18 (190400-535401451):1)
E/AndroidRuntime(22457):    at cmkx.e(:com.google.android.gms@231818044@23.18.18 (190400-535401451):4)
E/AndroidRuntime(22457):    at cvdn.a(:com.google.android.gms@231818044@23.18.18 (190400-535401451):0)
E/AndroidRuntime(22457):    at cvdk.a(:com.google.android.gms@231818044@23.18.18 (190400-535401451):1)
E/AndroidRuntime(22457):    at cvdp.a(:com.google.android.gms@231818044@23.18.18 (190400-535401451):2)
E/AndroidRuntime(22457):    at cvep.m(:com.google.android.gms@231818044@23.18.18 (190400-535401451):6)
E/AndroidRuntime(22457):    at cvep.g(:com.google.android.gms@231818044@23.18.18 (190400-535401451):11)
E/AndroidRuntime(22457):    at egur.B(:com.google.android.gms@231818044@23.18.18 (190400-535401451):0)
E/AndroidRuntime(22457):    at com.google.android.gms.chimera.GmsAppComponentFactory.instantiateProvider(:com.google.android.gms@231818044@23.18.18 (190400-535401451):9)
E/AndroidRuntime(22457):    at android.app.ActivityThread.installProvider(ActivityThread.java:7754)
E/AndroidRuntime(22457):    at android.app.ActivityThread.acquireProvider(ActivityThread.java:7352)
E/AndroidRuntime(22457):    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:3668)
E/AndroidRuntime(22457):    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2542)
E/AndroidRuntime(22457):    at android.content.ContentResolver.query(ContentResolver.java:1213)
E/AndroidRuntime(22457):    at android.content.ContentResolver.query(ContentResolver.java:1161)
E/AndroidRuntime(22457):    at android.content.ContentResolver.query(ContentResolver.java:1117)
E/AndroidRuntime(22457):    at cmkx.k(:com.google.android.gms@231818044@23.18.18 (190400-535401451):2)
E/AndroidRuntime(22457):    at cmkx.l(:com.google.android.gms@231818044@23.18.18 (190400-535401451):1)
E/AndroidRuntime(22457):    at cmkx.e(:com.google.android.gms@231818044@23.18.18 (190400-535401451):4)
E/AndroidRuntime(22457):    at cvdn.a(:com.google.android.gms@231818044@23.18.18 (190400-5354

解决步骤

1. 配置Android网络权限与明文HTTP访问(若需)

  • 打开android/app/src/main/AndroidManifest.xml,添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 优先改用HTTPS请求(worldtimeapi支持HTTPS),修改代码中的请求地址:
    Response response = await get(Uri.https('worldtimeapi.org', '/api/timezone/Asia/Karachi'));
    
  • 若必须使用HTTP,需创建网络安全配置文件:
    在android/app/src/main/res/xml下新建network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">worldtimeapi.org</domain>
        </domain-config>
    </network-security-config>
    
    然后在AndroidManifest.xml的<application>标签中引用:
    android:networkSecurityConfig="@xml/network_security_config"
    

2. 添加异步请求错误处理

当前代码未处理API请求的异常情况,可能导致崩溃。修改getTime()方法:

void getTime() async{
  try {
    Response response = await get(Uri.https('worldtimeapi.org', '/api/timezone/Asia/Karachi'));
    if (response.statusCode == 200) {
      Map<String, dynamic> data = jsonDecode(response.body);
      print(data);

      // 空值判断避免空指针
      String datetime = data['datetime'] ?? '';
      String offset = data['utc_offset'] ?? '';
      print(datetime);
      print(offset);

      if (datetime.isNotEmpty) {
        DateTime now = DateTime.parse(datetime);
        print(now);
      }
    } else {
      print('API请求失败,状态码:${response.statusCode}');
    }
  } catch (e) {
    print('请求出错:$e');
  }
}

3. 解决Google Play Services冲突

从错误日志看,崩溃与Google Play Services的Provider初始化相关,尝试以下操作:

  • 清理项目缓存:执行flutter clean,再运行flutter pub get
  • 更新Flutter及依赖:运行flutter upgrade,并将pubspec.yaml中的http包更新至最新版本
  • 确保测试设备/模拟器的Google Play Services已更新到最新版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:56