如何从服务器上的 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何从 php 获取数据表 jquery 插件的 json 数据

如何从php服务器获取json数据到android mobile

如何在 TypeScript 中获取 JSON 文件上的 Object.keys 时设置类型?

如何从 MAMP 服务器添加图像 php 文件

如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?

从 Angular 范围的 php 文件中获取 json 数据