Произошло исключение - ошибки JSON API - флаттер - PullRequest
0 голосов
/ 30 сентября 2019

Мне нужно подключить свой проект к JSON API, я следовал за многими документами с веб-сайта флаттера и проблемами переполнения стека, но у меня было много проблем, я написал несколько кодов для соединения с JSON, но когда я работаю с Android SDK, яполучил эту ошибку:

enter image description here

Но после добавления этой строки в AndroidMainifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" <uses-permission android:name="android.permission.INTERNET" />

Я получил ту же ошибку выше! Я уверен, что я соединяюсь с WiFi!

Когда я работаю с iOS SDK, я получаю эту ошибку:

enter image description here

Код:

import 'dart:convert';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart';

List<Category> _catgList =new List<Category>();

Future<List<Category> > fetchCategory() async {
  final response = await http.get('url of json'); // Here first error

  if (response.statusCode == 200) {

    List<dynamic> values = new List<dynamic>();
    values = json.decode(response.body); // Here second error
    if(values.length>0){
      for(int i=0;i<values.length;i++){
        if(values[i]!=null){
          Map<String,dynamic> map=values[i];
          _catgList.add(Category.fromJson(map));
          debugPrint('Id-------${map['id']}');
          debugPrint('Id-------${map['title']}');
        }
      }
    }
    return _catgList;

  } else {
    throw Exception('Failed to load post');
  }
}

class Category {

  final int id;
  String title;


  Category({this.id, this.title});

  factory Category.fromJson(Map<String, dynamic> json) {
    return Category(
        id: json['id'],
        title: json['title'].toString(),
    );
  }
}

JSON:

{
    "status" : "ok",
    "count" : 14,
    "categories" : [
      {
        "id" : 2,
        "title" : "world"
      },
      {
        "id" : 13,
        "title" : "games"
      },
      {
        "id" : 54,
        "title" : "woman"
      },
      {
        "id" : 50,
        "title" : "health"
      },
      {
        "id" : 48,
        "title" : "kitchen"
      },
      {
        "id" : 4292,
        "title" : "applications"
      },
      {
        "post_count" : 51,
        "id" : 51,
        "title" : "culture"
      },
      {
        "id" : 49,
        "title" : "sport"
      },
      {
        "id" : 8,
        "title" : "travel"
      },
      {
        "id" : 53,
        "title" : "policy"
      },
      {
        "id" : 52,
        "title" : "cars"
      },
      {
        "id" : 20,
        "title" : "tech"
      },
      {
        "id" : 4293,
        "title" : "gharaeb"
      },
      {
        "id" : 18,
        "title" : "business"
      }
    ]
  }

Что не так в моем коде ??

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Первая ошибка, вероятно, связана с некоторыми проблемами в сети или с настройкой. Для второй проблемы замените эту строку в вашем коде

values = json.decode(response.body);

на

values = json.decode(response.body)["categories"];

Как видно из предоставленных вами данных JSON, метод json.decode возвращает карту, и выможете получить список категорий по json.decode(response.body)["categories"].

1 голос
/ 30 сентября 2019

Вы пропустили это для json.decode или encode.

    import 'dart:convert'

И, пожалуйста, отправьте мой код для http запроса.

try{
  var client = new http.Client();
  var url = "Your Url";
  var response = await client.get(url);
    if(response.statusCode == 200){
      var results = json.decode(response.body);
      if(results['status'] == 'ok'){
         //if your result have loop 
         for(var item in results['categories']){
          //enter your code
          print(item['id'] + ":" + item['title']);
         }
         //you can use this your response value
         print(results['your_key1']['your_key2']); 
      }                  
  }
}on Exception catch(err){
 print("Error: $err");
}

Я надеюсь помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...