繁体   English   中英

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

[英]How to get the json data from a php file on the server to the flutter app

我的大学服务器上托管了一个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)和列表中的某些数据不是字符串形式的。

问题在于您的数据不是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"
  }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM