Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振http请求有时显示错误_Flutter_Dart_Flutter Layout_Flutter Dependencies - Fatal编程技术网

Flutter 颤振http请求有时显示错误

Flutter 颤振http请求有时显示错误,flutter,dart,flutter-layout,flutter-dependencies,Flutter,Dart,Flutter Layout,Flutter Dependencies,我正在努力学习在Flutter中进行api调用,并制作一个至少对我有用的应用程序 为此,我打电话给Nifty的(印度证券交易所)API: 我使用以下代码来实现我的目标 import 'dart:convert'; import 'package:http/http.dart'; final url = 'https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY'; Future<Map<String, dyna

我正在努力学习在Flutter中进行api调用,并制作一个至少对我有用的应用程序

为此,我打电话给Nifty的(印度证券交易所)API:

我使用以下代码来实现我的目标

import 'dart:convert';

import 'package:http/http.dart';

final url = 'https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY';

Future<Map<String, dynamic>> fetchNiftyData() async {
  final response = await get(
    Uri.parse(url),
  );

  Map<String, dynamic> responseBody = jsonDecode(response.body);
  return responseBody;
}

导入'dart:convert';
导入“包:http/http.dart”;
最终url=https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY';
Future fetchNiftyData()异步{
最终响应=等待获取(
解析(url),
);
Map responseBody=jsonDecode(response.body);
返回响应体;
}
它起作用了。它会按原样从api返回数据

但有时不会。重新启动应用程序时,它可能会再次工作,也可能不会工作。我不希望我的应用程序在调用api时如此不一致

这是我得到的错误堆栈:

Restarted application in 3,418ms.
E/flutter ( 3901): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: FormatException: Unexpected character (at character 1)
E/flutter ( 3901): <!DOCTYPE html>
E/flutter ( 3901): ^
E/flutter ( 3901):
E/flutter ( 3901): #0      _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5)
E/flutter ( 3901): #1      _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1271:9)
E/flutter ( 3901): #2      _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:936:22)
E/flutter ( 3901): #3      _parseJson (dart:convert-patch/convert_patch.dart:40:10)
E/flutter ( 3901): #4      JsonDecoder.convert (dart:convert/json.dart:506:36)
E/flutter ( 3901): #5      JsonCodec.decode (dart:convert/json.dart:157:41)
E/flutter ( 3901): #6      jsonDecode (dart:convert/json.dart:96:10)
E/flutter ( 3901): #7      fetchBankNiftyData
package:options_trader/Services/fetch_bank_nifty_data.dart:12
E/flutter ( 3901): <asynchronous suspension>
E/flutter ( 3901): #8      _BankNiftyScreenState.getBankNiftyData
package:options_trader/Screens/bank_nifty_screen.dart:21
E/flutter ( 3901): <asynchronous suspension>
E/flutter ( 3901):
在3418ms内重新启动应用程序。
E/flatter(3901):[错误:flatter/lib/ui/ui\u dart\u state.cc(186)]未处理的异常:FormatException:意外字符(在字符1处)
E/颤振(3901):
E/颤振(3901):^
E/颤振(3901):
E/flatter(3901):#0_ChunkedJsonParser.fail(dart:convert patch/convert_patch.dart:1404:5)
E/flatter(3901):#1 _ChunkedJsonParser.parseNumber(dart:convert patch/convert_patch.dart:1271:9)
E/flatter(3901):#2 _ChunkedJsonParser.parse(dart:convert patch/convert_patch.dart:936:22)
E/flatter(3901):#3(省道:转换补丁/转换补丁。省道:40:10)
E/flatter(3901):#4 JsonDecoder.convert(dart:convert/json.dart:506:36)
E/flatter(3901):#5jsoncodec.decode(dart:convert/json.dart:157:41)
E/flatter(3901):#6 jsonDecode(dart:convert/json.dart:96:10)
E/颤振(3901):#7
套餐:选项\交易员/服务/获取\银行\数据。dart:12
E/颤振(3901):
E/颤振(3901):#8 BankNiftyScreenState.getBankNiftyData
包装:选项\交易员/屏幕/银行\漂亮屏幕。dart:21
E/颤振(3901):
E/颤振(3901):
最后,这是我调用/使用获取的数据的方式

import 'package:flutter/material.dart';

import '../Services/fetch_nifty_data.dart';

class NiftyScreen extends StatefulWidget {
  @override
  _NiftyScreenState createState() => _NiftyScreenState();
}

class _NiftyScreenState extends State<NiftyScreen> {
  Map<String, dynamic>? niftyDetails = {};

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

  getNiftyDetails() async {
    this.niftyDetails = await fetchNiftyData();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: niftyDetails!.isNotEmpty
          ? ListView.builder(
              itemCount: niftyDetails!["filtered"]["data"].length,
              itemBuilder: (_, index) {
                return ListTile(
                  title: Text(
                      '${niftyDetails!["filtered"]["data"][index]["strikePrice"]}'),
                );
              },
            )
          : LinearProgressIndicator(),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“../Services/fetch_nifty_data.dart”;
类NiftyScreen扩展StatefulWidget{
@凌驾
_NiftyScreenState createState()=>NiftyScreenState();
}
类_NiftyScreenState扩展状态{
映射?niftyDetails={};
@凌驾
void initState(){
super.initState();
getNiftyDetails();
}
getNiftyDetails()异步{
this.niftyDetails=等待fetchNiftyData();
setState((){});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:niftyDetails!.isNotEmpty
?ListView.builder(
itemCount:niftyDetails![“筛选的”][“数据”]。长度,
itemBuilder:(\ux,索引){
返回列表块(
标题:正文(
“${niftyDetails![“筛选”][“数据”][索引][“删除项”]}”),
);
},
)
:LinearProgressIndicator(),
);
}
}
我做错了什么?最佳实践是什么?TIA

当API没有以您期望的格式返回您想要的数据(json)时,会导致
错误,但它返回一个错误页面,很可能是404,它以
开头,而不是
{“记录”:{“expiryDates”…等]
,可以使用jsonDecode解析


如果它工作了几次,而其他人没有,那么这很可能不是您的问题,而且可能是由于API本身限制了速率造成的,这解释了为什么它以后可以再次工作,而您不必更改代码。

谢谢您的回答,伙计:)