如何从服务器上的 php 文件中获取 json 数据到 Flutter 应用程序

Posted

技术标签:

【中文标题】如何从服务器上的 php 文件中获取 json 数据到 Flutter 应用程序【英文标题】:How to get the json data from a php file on the server to the flutter app 【发布时间】:2019-11-04 23:22:15 【问题描述】:

我的大学服务器上托管了一个 php 文件,当我在服务器上运行此文件时,它运行良好。运行链接http://www.alkadhum-col.edu.iq/Teachers%20Activities/get.php 中的php 文件后,我可以获取json 数据,但是当我在应用程序屏幕上颤振尝试时无法获取。

首先,我尝试更改网址不起作用。其次,我试图将 json 对象转换为 .toString() 并且也不起作用。

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

class Post 
  String name;
  String msg;
  String day;
  String date;

  Post(this.name, this.msg, this.day, this.date);

  factory Post.fromJson(Map<String, dynamic> json) 
    return Post(
      name: json['name'].toString(),
      msg: json['msg'].toString(),
      day: json['day'].toString(),
      date: json['date'].toString(),
    );
  


class CustomListView extends StatelessWidget 

  List teachers = [];

  CustomListView(this.teachers);

  @override
  Widget build(BuildContext context) 
    return (
      ListView.builder(
        itemCount: teachers.length, 
        itemBuilder: (BuildContext context, int index) 
          return createviewItem(teachers[index], context);
        ,
      )
    );
  

  Widget createviewItem(Post teachers, BuildContext context) 
    return ListTile(
      title: new Card(
        child: new Container(
          decoration: BoxDecoration(border: Border.all(color: Colors.lightBlue)),
          padding: EdgeInsets.all(20.0),
          margin: EdgeInsets.all(20.0),
          child: Column(children: <Widget>[
            new Text(teachers.name),
            new Text(teachers.msg),
            new Text(teachers.day),
            new Text(teachers.date)
          ],),
        )
      )
    );
  




Future<List<Post>> downloadJSON() async 
  final jsonEndpoint = "http://www.alkadhum-col.edu.iq/Teachers%20Activities/get.php";
  final response = await get(jsonEndpoint);
  if (response.statusCode == 200) 
    List teachers = json.decode(response.body);
    return teachers.map(
      (teacher) => new Post.fromJson(teacher)
    ).toList();
  

  else 
    throw Exception("Unable to get JSON data");
  



class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return new MaterialApp(
    theme: new ThemeData(
    primarySwatch: Colors.deepOrange,
    ),
    home: new Scaffold(
    appBar: new AppBar(title: const Text('Flutter and PHP')),
    body: new Center(

    child: new FutureBuilder<List<Post>>(
    future: downloadJSON(),

    builder: (context, snapshot) 
    if (snapshot.hasData) 
    List<Post> teachers = snapshot.data;
    return new CustomListView(teachers);
     else if (snapshot.hasError) 
    return Text('$snapshot.error');
    
    //return  a circular progress indicator.
    return new CircularProgressIndicator();
    ,
    ),
    ),
    ),
    );


void main() 
runApp(MyApp());

我收到格式异常:意外字符(在字符 115 处)和一些数据出现在列表中,而不是字符串形式。

【问题讨论】:

不用数据模型也行 您正在使用您创建的名为 Post 的类对 json 数据进行建模 是的,但是如何让它工作 var data = jsonDecode(jsonData);打印(数据['someData']); 我已经这样做了。我的问题是如何在我的应用屏幕上打印它们?。 【参考方案1】:

问题是你的数据不是 JSON 数据。

[
  
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  
][
  
    "name": "م. امجد عباس التميمي",
    "msg": "امتحان مادة هندسة البرامجيات اول فصلين",
    "day": "الاحد",
    "date": "2019-06-21"
  ,
  
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  
]

问题在这两个括号中:

][

JSON 代码应该是这样的。

[
  
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  ,
  
    "name": "م. امجد عباس التميمي",
    "msg": "امتحان مادة هندسة البرامجيات اول فصلين",
    "day": "الاحد",
    "date": "2019-06-21"
  ,
  
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  
]

【讨论】:

以上是关于如何从服务器上的 php 文件中获取 json 数据到 Flutter 应用程序的主要内容,如果未能解决你的问题,请参考以下文章