【问题标题】:FLUTTER- FETCH DATA FROM JSON LIST颤振 - 从 JSON 列表中获取数据
【发布时间】:2020-11-17 21:48:25
【问题描述】:

我有一些我无法解决的问题,请帮助我。我想从数据库中获取数据,这个数据是 json 列表......我写了一些代码,但我无法在控制台上打印......我将添加下面的代码,请帮助我......我想我必须使用 for 循环,但是当我尝试时,我只能获取 1 个数据...

代码如下:

class DenemeParca extends StatefulWidget {
  final String parcaReferans;

  DenemeParca({this.parcaReferans});

  @override
  _DenemeParcaState createState() => _DenemeParcaState();
}

Future<List<dynamic>> getIhaleData() async {
  final url =
      'https://www.ekspar.com.tr/onarim/dart.php';
  var response = await http.get(url);
  return json.decode(response.body);
}

String _parcaReferans(dynamic user) {
  for (var i = 8; i < 40; i++) {
    return user['parca_adi']['$i'];
  }
}

class _DenemeParcaState extends State<DenemeParca> {
  Widget _buildBody() {
    return FutureBuilder<List<dynamic>>(
      future: getIhaleData(),
      builder: (context, snapshot) {
        return ListView.builder(
          itemCount: snapshot.data.length,
          itemBuilder: (context, index) {
            return Container(
              child: Column(
                children: <Widget>[
                  RaisedButton(
                    onPressed: () async {
                      print(_parcaReferans(snapshot.data[index]));
                    },
                    child: Text('Get Data'),
                  ),
                ],
              ),
            );
          },
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Title'),
      ),
      body: _buildBody(),
    );
  }
}

void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Ekspar Demo',
      theme: ThemeData(
        backgroundColor: Colors.white,
      ),
      home: DenemeParca() 
    ),
  );
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return DenemeParca();
  }
}

顺便说一下链接有json码,谢谢...

【问题讨论】:

  • API 中的 JSON 不断变化,你能解决这个问题吗?
  • 对不起我的朋友,我正在尝试这样做://
  • 完成后告诉我,以便我回答您的问题
  • 它不起作用,我仍然有同样的错误......我的意思是我没有改变任何东西
  • 代码中的链接不包含“parca_referans”。

标签: json database flutter dart


【解决方案1】:

由于您的“parcaAdi”不是 JSON 数组,因此您无法遍历所有值,而是必须一一选择它们。为了获取所有数据,我首先使用 website 为您的 JSON 创建了一个模型。现在要获取您的数据,您可以这样做。

Future getIhaleData() async {
  final url =
      'https://www.ekspar.com.tr/onarim/dart-ilan-listele.php?parca_ilan_id=111';
  var response = await http.get(url);
  Model model = Model.fromJson(json.decode(response.body)[0]);
  // now you can access your data.
  print(model.parcaAdi.s1);
  print(model.parcaAdi.s2);
}

这是模型类的代码。

class Model {
  ParcaAdi parcaAdi;

  Model({this.parcaAdi});

  Model.fromJson(Map<String, dynamic> json) {
    parcaAdi =
        json['parca_adi'] != null ? ParcaAdi.fromJson(json['parca_adi']) : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    if (parcaAdi != null) {
      data['parca_adi'] = parcaAdi.toJson();
    }
    return data;
  }
}

class ParcaAdi {
  String s1;
  String s2;
  String s3;
  String s4;
  String s5;
  String s6;
  String s7;
  String s8;

  ParcaAdi(
      {this.s1, this.s2, this.s3, this.s4, this.s5, this.s6, this.s7, this.s8});

  ParcaAdi.fromJson(Map<String, dynamic> json) {
    s1 = json['1'];
    s2 = json['2'];
    s3 = json['3'];
    s4 = json['4'];
    s5 = json['5'];
    s6 = json['6'];
    s7 = json['7'];
    s8 = json['8'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['1'] = s1;
    data['2'] = s2;
    data['3'] = s3;
    data['4'] = s4;
    data['5'] = s5;
    data['6'] = s6;
    data['7'] = s7;
    data['8'] = s8;
    return data;
  }
}

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 2019-04-20
    • 2021-03-21
    • 2021-08-11
    • 2021-03-17
    • 2020-12-12
    • 2023-03-28
    • 2020-03-19
    • 2021-01-26
    相关资源
    最近更新 更多