Flutter JSON数据问题

问题描述

我面临着从Flutter移动应用获取json数据的问题。

代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_app/pages/main_page.dart';


class App extends StatelessWidget
{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,title: "Flutter NodeJS",home: MainPage(),);
  }
}
void main(){
  runApp(App());
}

main_page.dart


import 'package:flutter/material.dart';
import 'package:flutter_app/modules/http.dart';
import 'package:flutter_app/pages/add_user_page.dart';

class MainPage extends StatefulWidget
{
  @override
  State<StatefulWidget> createState() {
    return MainPageState();
  }
}
class User
{
  String id;
  String first_name,email;
  User(this.id,this.first_name,this.email);
}
class MainPageState extends State<MainPage>
{
  List<User> users = [];
  Future<void> refreshUsers()async{
    var result = await http_get('users');
    if(result.ok)
    {
      setState(() {
        users.clear();
        var in_users = result.data as List<dynamic>;
        in_users.forEach((in_user){
          users.add(User(
            in_user['id'].toString(),in_user['first_name'],in_user['email']
          ));
        });
      });
    }
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Users"),//email: Text("Email"),actions: <Widget>[
          IconButton(
            icon: Icon(Icons.add),onPressed: (){
              Navigator.of(context).push(MaterialPageRoute(
                builder: (context){
                  return AddUserPage();
                }
              ));
            },)
        ],),body: RefreshIndicator(

        onRefresh: refreshUsers,child: ListView.separated(
          itemCount: users.length,itemBuilder: (context,i) => ListTile(
            leading: Icon(Icons.person),title: Text(users[i].first_name+"\n" + users[i].email),//email: Text(users[i].email),separatorBuilder: (context,i) => Divider(),);
  }
}

http.dart

import 'dart:convert';

import "package:http/http.dart" as http;

class RequestResult
{
  bool ok;
  dynamic data;
  RequestResult(this.ok,this.data);
}
//'https://jsonplaceholder.typicode.com/users/1
//http://192.168.183.179:8081/api/users/
const PROTOCOL = "http";
const DOMAIN = "https://jsonplaceholder.typicode.com/users/1";

Future<RequestResult> http_get(String route,[dynamic data]) async
{
  var dataStr = jsonEncode(data);
  var url = "$PROTOCOL://$DOMAIN/$route?data=$dataStr";
  var result = await http.get(url);
  return RequestResult(true,jsonDecode(result.body));
}
Future<RequestResult> http_post(String route,[dynamic data]) async
{
  var url = "$PROTOCOL://$DOMAIN/$route";
  var dataStr = jsonEncode(data);
  var result = await http.post(url,body: dataStr,headers:{"Content-Type":"application/json"});
  return RequestResult(true,jsonDecode(result.body));
}

当我从“ https://jsonplaceholder.typicode.com/users/1”获取json数据时。它的工作正常。 enter image description here

当我尝试从“ https://192.168.183.179:8081/api/users”获取json数据时。其给出错误:

at Object.createErrorWithStack(http:// localhost:15340 / dart_sdk.js:4348:12) 在Object._rethrow(http:// localhost:15340 / dart_sdk.js:37892:16) 在async._AsyncCallbackEntry.new.callback(http:// localhost:15340 / dart_sdk.js:37886:13) 在Object._microtaskLoop(http:// localhost:15340 / dart_sdk.js:37718:13) 在_startMicrotaskLoop(http:// localhost:15340 / dart_sdk.js:37724:13) 在http:// localhost:15340 / dart_sdk.js:33243:9

我做错了

关于, SAO

解决方法

检查邮递员该IP地址是否正在返回数据。

另一种情况是获取的数据,无法正确传输到应用程序。检查数据存储的变量和类型。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...