मैं स्पंदन में इंटरनेट से डेटा प्राप्त करने की कोशिश कर रहा हूँ। लेकिन मुझे JSON पार्सिंग पर एक त्रुटि मिल रही है। क्या कोई मुझे बता सकता है कि समस्या क्या है?

मैं इस यूआरएल से डेटा प्राप्त करने की कोशिश कर रहा हूँ

https://swapi.co/api/starships/

उदाहरण JSON

{
    "count": 37, 
    "next": "https://swapi.co/api/starships/?page=2", 
    "previous": null, 
    "results": [
        {
            "name": "Executor", 
            "model": "Executor-class star dreadnought", 
            "manufacturer": "Kuat Drive Yards, Fondor Shipyards", 
            "cost_in_credits": "1143350000", 
            "length": "19000", 
            "max_atmosphering_speed": "n/a", 
            "crew": "279144", 
            "passengers": "38000", 
            "cargo_capacity": "250000000", 
            "consumables": "6 years", 
            "hyperdrive_rating": "2.0", 
            "MGLT": "40", 
            "starship_class": "Star dreadnought", 
            "pilots": [], 
            "films": [
                "https://swapi.co/api/films/2/", 
                "https://swapi.co/api/films/3/"
            ], 
            "created": "2014-12-15T12:31:42.547000Z", 
            "edited": "2017-04-19T10:56:06.685592Z", 
            "url": "https://swapi.co/api/starships/15/"
        }, 

    ]
}

मॉडल वर्ग

class RestModel {
    final String name;
    final String model;
    final String manufacturer;
    final String cost_in_credits;
    final String length;
    final String max_atmosphering_speed;
    final String crew;
    final String passengers;
    final String cargo_capacity;
    final String consumables;
    final String hyperdrive_rating;
    final String MGLT;
    final String starship_class;
    final List films;
    final String pilots;
    final String created;
    final String edited;
    final String url;

    RestModel(
        {this.name,
        this.model,
        this.manufacturer,
        this.cost_in_credits,
        this.length,
        this.max_atmosphering_speed,
        this.crew,
        this.passengers,
        this.cargo_capacity,
        this.consumables,
        this.hyperdrive_rating,
        this.MGLT,
        this.starship_class,
        this.films,
        this.pilots,
        this.created,
        this.edited,
        this.url});

    factory RestModel.fromJson(Map<String, dynamic> json) {
        return RestModel(
            name: json["name"],
            model: json["model"],
            manufacturer: json["manufacturer"],
            cost_in_credits: json["cost_in_credits"],
            max_atmosphering_speed: json["max_atmosphering_speed"],
            crew: json["crew"],
            passengers: json["passengers"],
            cargo_capacity: json["cargo_capacity"],
            consumables: json["consumables"],
            hyperdrive_rating: json["hyperdrive_rating"],
            MGLT: json["MGLT"],
            starship_class: json["starship_class"],
            films: json["flims"],
            pilots: json["pilots"],
            created: json["created"],
            edited: json["edited"],
            url: json["url"],
        );
    }
}

और स्पंदन कोड है:

final link = "https://swapi.co/api/starships/";

List<RestModel> list;

Future getData() async {
    var res = await http
    .get(Uri.encodeFull(link), headers: {"Accept":"application/json"});

    if (res.statusCode == 200) {
        var data = json.decode(res.body);
        var rest = data["results"];
        for (var model in rest) {
            list.add(RestModel.fromJson(model));
        }
        print("List Size: ${list.length}");
    }  
}

मुख्य समस्या यह है कि जब यह JSON से डेटा भरने का प्रयास करता है।

RestModel.fromJson(model)

तो इस समस्या को ठीक करने के लिए मुझे क्या बदलना होगा।

5
Shudipto Trafder 7 जुलाई 2018, 19:52

1 उत्तर

सबसे बढ़िया उत्तर

डेटा 'results' को List पर इस तरह डालने का प्रयास करें:

var rest = data["results"] as List; 

अपडेट किया गया

अब जब हम त्रुटि लॉग जानते हैं: "कोई स्थिर विधि 'fromJson' कक्षा 'RestModel' में घोषित नहीं है"

ऐसा इसलिए है क्योंकि आप इस पंक्ति में एक स्थिर विधि का उपयोग कर रहे हैं:

list.add(RestModel.fromJson(model));

फ़ैक्टरी कंस्ट्रक्टर का उपयोग करने के लिए आपको कॉल को बदलना होगा, जैसे:

list.add(new RestModel.fromJson(model));
3
diegoveloper 8 जुलाई 2018, 20:32