1

Calling API but showing error, I'm unable to parse data in the bean class.

My Response:

   {
"error":"0",
"status":200,
"deliveryCharge":"14.00",
"image_base_url":"http:\/\/xxxxx.tk\/assets\/event\/image\/",
"image_logo_url":"http:\/\/xxxxx.tk\/assets\/event\/logo\/",
"eventList":[
{
"event_id":"1",
"event_name":"Syscraft Premier League",
"event_location":"12 ny valleys",
"event_type_id":"15",
"start_date":"2019-01-10 03:21:00",
"end_date":"2019-01-26 16:10:00",
"event_logo":"f4f0bfc168a3816891e2749232c5243f.jpg"
},
{
"event_id":"3",
"event_name":"Republic Day Event 2019",
"event_location":"AH-654 Villa No. 42 New Township New Township",
"event_type_id":"1",
"start_date":"2019-01-26 00:00:00",
"end_date":"2019-01-26 11:55:00",
"event_logo":"3a4a7fabbbd7ed8febf67bacda71ae48.jpg"
}
]
}

Calling Api

  Future<List<EventResponse>> fetchEvent( ) async {

String url='http://xxxxxxxxxxxxxxx.tk/api/userapp/event/lists';
var headers = new Map();
headers['Auth-Key'] = 'OCDOC@2018';
headers['End-Client'] = 'OCDOC';
var body = new Map();
headers['schedule'] = 'present';
http.Response res = await http.post(url,headers: headers, body: body);
final Map<String,dynamic> parsed=json.decode(res.body); // post api call
print("Reposnce Event:---"+parsed.toString());}

My Bean class

class EventResponse{


String error;
  int status;
  String deliveryCharges;
  String imageBaseUrl;
  String imageLogoUrl;
  List<Event> eventList;

  EventResponse({
             this.error,
             this.status,
             this.deliveryCharges,
             this.imageBaseUrl,
             this.imageLogoUrl,
             this.eventList
               });

  factory EventResponse.convertEventResponse(Map<String,dynamic> json){
    return EventResponse(
                            error: json['error'],
                            status:  json['status'],
                            deliveryCharges:  json['deliveryCharge'],
                            imageBaseUrl:  json['image_base_url'],
                            imageLogoUrl:  json['image_logo_url'],
                            eventList:  json['eventList']);

  }}
class Event{

  String eventId;
  String eventName;
  String location;
  String event_logo;

  Event({
    this.eventId,
    this.eventName,
    this.location,
    this.event_logo,
  });

  factory Event.convertEvent(Map<String,dynamic> json){
    return Event(
      eventId: json['event_id'],
      eventName:  json['event_name'],
      location:  json['event_location'],
      event_logo:  json['event_logo'],

    );}}

Showing Error

_InternalLinkedHashMap<dynamic, dynamic> is not a subtype of type Map<String, String>

2 Answers 2

1

Rewrite EventResponse like this:

class EventResponse {
  String error;
  int status;
  String deliveryCharges;
  String imageBaseUrl;
  String imageLogoUrl;
  List<Event> eventList;

  EventResponse(
      {this.error,
      this.status,
      this.deliveryCharges,
      this.imageBaseUrl,
      this.imageLogoUrl,
      this.eventList});

  factory EventResponse.convertEventResponse(Map<String, dynamic> json) {
    List<dynamic> events = json['eventList'];
    List<Event> eventList = events.map((e) => Event.convertEvent(e)).toList();
    return EventResponse(
        error: json['error'],
        status: json['status'],
        deliveryCharges: json['deliveryCharge'],
        imageBaseUrl: json['image_base_url'],
        imageLogoUrl: json['image_logo_url'],
        eventList: eventList,
        );
  }
}
Sign up to request clarification or add additional context in comments.

Comments

0

I have changed EventResponse as @Richard Heap did.

factory EventResponse.convertEventResponse(Map<String, dynamic> json) {
List<dynamic> events = json['eventList'];
List<Event> eventList = events.map((e) => Event.convertEvent(e)).toList();
return EventResponse(
    error: json['error'],
    status: json['status'],
    deliveryCharges: json['deliveryCharge'],
    imageBaseUrl: json['image_base_url'],
    imageLogoUrl: json['image_logo_url'],
    eventList: eventList,
    );
  }
}

One more thing I need to change is when I post parameters and headers need to define their Map() to Map<String,String>().

 Future<EventResponse> fetchEvent( ) async { // here i change Future type

String url='http://xxxxxxx-oceanapparel.tk/api/userapp/event/lists';
var headers = new Map<String, String>(); //here i defined Map type
headers['Auth-Key'] = 'OCDOC@2018';
headers['End-Client'] = 'OCDOC';
var body = new Map<String, String>(); //here i defined Map type
headers['schedule'] = 'present';
http.Response res = await http.post(url,headers: headers, body: body);

print("Reposnce Event:---"+res.body);

  }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.