【问题标题】:Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)未处理的异常:FormatException:无效的 radix-10 数字(在字符 1)
【发布时间】:2021-04-07 05:30:05
【问题描述】:

我正在关注来自 net ninja here 的颤振初学者教程。但是我在斯里兰卡的时区 UTC +5:30 所以我尝试添加半小时,但它不断收到我无法修复的错误。如果可以,请帮助我!!。

完整的回溯错误:

Performing hot restart...
Syncing files to device AOSP on IA Emulator...
Restarted application in 797ms.
E/flutter (31824): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)
E/flutter (31824): 5:3
E/flutter (31824): ^
E/flutter (31824): 
E/flutter (31824): #0      int._throwFormatException (dart:core-patch/integers_patch.dart:131:5)
E/flutter (31824): #1      int._parseRadix (dart:core-patch/integers_patch.dart:142:16)
E/flutter (31824): #2      int._parse (dart:core-patch/integers_patch.dart:100:12)
E/flutter (31824): #3      int.parse (dart:core-patch/integers_patch.dart:63:12)
E/flutter (31824): #4      WorldTime.getTime (package:world_time_app/services/world_time.dart:24:39)
E/flutter (31824): <asynchronous suspension>
E/flutter (31824): #5      _LoadingState.SetupWorldTime (package:world_time_app/pages/loading.dart:14:3)
E/flutter (31824): <asynchronous suspension>
E/flutter (31824): 

代码:

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

class WorldTime{

  String location;
  String time;
  String flag;
  String url;

  WorldTime({this.location, this.flag, this.url});

  Future<void> getTime() async{

    Response response = await get('https://www.worldtimeapi.org/api/timezone/$url');
    Map data = jsonDecode(response.body.toString());
    //print(data);
    String datetime = data['datetime'];
    String offset = data['utc_offset'].substring(2,5);
    //print(dataTime);
    //print(offset);
    DateTime now = DateTime.parse(datetime);
    now = now.add(Duration(hours: int.parse(offset)));

    time = now.toString();
    print(time);



  }

}

【问题讨论】:

    标签: html flutter dart https


    【解决方案1】:

    您试图将 5:3 解析为 int,这会导致错误。

    问题在于返回无效数字 (5:3) 的子字符串。

    首先你应该使用data['utc_offset'].substring(1,3) 来获取小时 和data['utc_offset'].substring(4,6) 只获得分钟。

    之后,您可以随意操作,例如:

    String offsetHours = data['utc_offset'].substring(1, 3);
    String offsetMinutes = data['utc_offset'].substring(4, 6);
    
    DateTime now = DateTime.parse(datetime);
    now = now.add(Duration(
      hours: int.parse(offsetHours), 
      minutes: int.parse(offsetMinutes)),
    );
    

    【讨论】:

      【解决方案2】:

      在我的情况下,我在权限参数中传递子路由,如下所示:

      var response =
                await http.get(Uri.https('https://favqs.com/api/quotes/', '4'), headers: {
              'Content-Type': 'application/json',
              'Authorization': "Token token='xxxxxxxxxxxxxxxx'",
            });
      

      但在第二个参数中删除https并移动/api/quotes/后,问题得到了解决。

      var response =
                await http.get(Uri.https('favqs.com', '/api/quotes/4'), headers: {
              'Content-Type': 'application/json',
              'Authorization': "Token token='xxxxxxxxxxxxxxxx'",
            });
      

      【讨论】:

        猜你喜欢
        • 2021-06-11
        • 2021-05-30
        • 1970-01-01
        • 2022-11-14
        • 1970-01-01
        • 1970-01-01
        • 2020-03-07
        • 1970-01-01
        • 2022-11-07
        相关资源
        最近更新 更多