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

如何从服务器上的php文件中获取json数据到Flatter应用程序,php,json,http,flutter,Php,Json,Http,Flutter,我有一个php文件托管在我的大学服务器上,当我在服务器上运行这个文件时,它运行得非常好。我可以在运行链接中的php文件后获取json数据,但当我在应用程序屏幕上的flatter中尝试该操作时无法获取json数据 首先,我试图更改url,但无效。其次,我尝试将json对象转换为.toString(),但也不起作用 import 'package:flutter/material.dart'; import 'package:http/http.dart' show get; import 'dar

我有一个php文件托管在我的大学服务器上,当我在服务器上运行这个文件时,它运行得非常好。我可以在运行链接中的php文件后获取json数据,但当我在应用程序屏幕上的flatter中尝试该操作时无法获取json数据

首先,我试图更改url,但无效。其次,我尝试将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());
}
导入“包装:颤振/材料.省道”;
导入“package:http/http.dart”show-get;
导入“dart:convert”;
班岗{
字符串名;
串味精;
弦日;
字符串日期;
Post({this.name,this.msg,this.day,this.date});
factory Post.fromJson(映射json){
回程站(
名称:json['name'].toString(),
msg:json['msg'].toString(),
day:json['day'].toString(),
日期:json['date'].toString(),
);
}
}
类CustomListView扩展了无状态小部件{
教师名单=[];
CustomListView(this.teachers);
@凌驾
小部件构建(构建上下文){
返回(
ListView.builder(
itemCount:teachers.length,
itemBuilder:(构建上下文,int索引){
返回createviewItem(教师[索引],上下文);
},
)
);
}
小部件createviewItem(教师职务,构建上下文){
返回列表块(
标题:新卡(
子容器:新容器(
装饰:框装饰(边框:border.all(颜色:Colors.lightBlue)),
填充:所有边缘设置(20.0),
裕度:所有边缘集(20.0),
子项:列(子项:[
新文本(教师姓名),
新文本(teachers.msg),
新课文(教师节),
新文本(教师日期)
],),
)
)
);
}
}
未来下载JSON()异步{
最终JSONEDPOINT=”http://www.alkadhum-col.edu.iq/Teachers%20Activities/get.php";
最终响应=等待获取(JSONEDPOINT);
如果(response.statusCode==200){
List teachers=json.decode(response.body);
return teachers.map(
(教师)=>new Post.fromJson(教师)
).toList();
}
否则{
抛出异常(“无法获取JSON数据”);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主题:新主题数据(
primarySwatch:颜色。深橙色,
),
家:新脚手架(
appBar:new appBar(标题:const Text('flatter and PHP')),
正文:新中心(
孩子:新未来建设者(
future:downloadJSON(),
生成器:(上下文,快照){
if(snapshot.hasData){
列表教师=snapshot.data;
返回新的CustomListView(教师);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
//返回循环进度指示器。
返回新的循环ProgressIndicator();
},
),
),
),
);
}
}
void main(){
runApp(MyApp());
}

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

问题是您的数据不是JSON数据

[
  {
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  }
][
  {
    "name": "م. امجد عباس التميمي",
    "msg": "امتحان مادة هندسة البرامجيات اول فصلين",
    "day": "الاحد",
    "date": "2019-06-21"
  },
  {
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  }
]
问题出在这两个括号内:

} ][ {
您可以不使用数据模型来建模您正在使用您创建的名为PostYes的类来建模json数据,但如何使其成为worksvar data=jsonDecode(jsonData);打印(数据['someData']);我已经做到了。我的问题是如何在我的应用程序屏幕上打印它们?。
[
  {
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  },
  {
    "name": "م. امجد عباس التميمي",
    "msg": "امتحان مادة هندسة البرامجيات اول فصلين",
    "day": "الاحد",
    "date": "2019-06-21"
  },
  {
    "name": "م.م علي ستار باراني",
    "msg": "امتحان مادة قواعد البيانات اول جابترين ",
    "day": "السبت",
    "date": "2019-06-20"
  }
]