inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)

강의를 활용하여 공공API를 받아오는데 오류가 나옵니다

해결된 질문

413

이수종

작성한 질문수 4

0

캡처.PNG강의를 보면서 공공API 인증키를 받아 새로 어플을 만들어 보고 있는데

_TypeError (type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>')

오류가 자꾸 나옵니다

스택오버플로우같은곳에 나와있는 해결법으로 오류를 없애면 비슷한 양식의 다른 오류가 나오거나

저 e 부분이 널값이 됩니다

혹시 어떻게 해야될지 방향성이라도 알려주실 수 있나요?

일단 사진처럼 나온다는것은 e 안에 API정보가 들어오긴 했다는것같은데

1.PNG

이 안에 result값 제외 어떤 값이든 입력시 널값으로 받아오는 것 같습니다

ex) data, name 등

API 양식이랑도 관련이 있을까요?

강의중에 API말씀하실때 대괄호 부분 관련해서 얘기하셨던것 같은데 그거랑도 관련이 있을까요?

{"result":

{"data":

[{"time_type":"오전“,

"lon":"129.2478",

"water_temp":"13.4",

“air_temp":"1.2",

"total_score":"매우나쁨",

"name":"부산북동",

"weather":"흐림",

"wind_speed":"10.6",

"date":"2022-11-30",

"wave_height":"0.5",

"lat":"35.2341"},

이 부분에서 시간을 너무 잡아먹어서 고민이네요

 

 

+추가로 key를 지우면

_TypeError (type '(dynamic) => Null' is not a subtype of type '(String, dynamic) => void' of 'f')

오류가 나옵니다 이쪽이 더 연관 있을지도 모르겠어요

Flutter

답변 1

0

오준석

e 가 Ocean 객체 하나가 되는 것을 기대하고 계시지만 사진으로 보면 Ocean 리스트 덩어리입니다.

e.forEach 해서 다시 꺼내야 합니다.

 

 

0

이수종

imageforEach를 여기다 작성하는게 맞나요? 우선 e.forEach를 써봤는데 또 오류가 나오네요..

0

이수종

 

0

오준석

아니요. jsonOceans 에서 처럼 쓰셔야합니다.

jsonOcean.forEach((key, e) {

e.forEach((key, ee) {

oceans.add(Ocean.fromJson(ee));

}

}

 

대충 이런 느낌이요.

0

이수종

image어...맞게 한거같은데 잘 안되네요ㅠ

0

오준석

혹시 e.map() 이 되나요? 지금 List<Map<String, dynamic>> 형태이니 List<Ocean> 으로 변환만 하면 되는 걸로 보이는데요.

혹시 jsonOceans 가 어떤 형태인지 보여주실 수 있으신가요?

 

0

이수종

 

 

image

 

image

강의중에 말씀해주셨던 dart to json 에서 변환하여 모델 만들고

아직 mvvm이 익숙하지 않아서 강의 초반부분 메인화면 UI작성 진도 부분쯤 참고해서 만들고 있어요

0

오준석

jsonOceans 받을 때 Iterable 타입을 지정해 주시는 것이 좋아요. 그래야 forEach나 map 함수 쓸 때 자동완성도 지원이 됩니다. 그냥 타입 없이 받으면 dynamic 타입으로 인식하여 런타임 에러에 취약합니다.

oceans 값을 바꿔야 되니까 final 은 없는게 편할 것 같네요.

forEach 에서 리스트에 add 하는 것 보다는 map 함수로 변환하는게 편할 것 같습니다.

수정 포인트 적어두었으니 참고하세요.

 

List<Ocean> oceans = [];

final Iterable jsonOceans = jsonResult['result'];


oceans = jsonOceans.map((e) => Ocean.fromJson(e)).toList();

0

이수종

image계속 여쭤봐서 죄송하네요 이번엔 Iterable쪽에서 에러가 나온것 같아요

그리고 혹시 강의에 사용된 API와 제가 사용중인 API에서 어떤부분이 달라서 오류가 이렇게 나오는지도 여쭤봐도 될까요?

강의에 올려주신 API를 이용하면 화면에 오류 없이 잘 출력 됩니다

0

오준석

사용중이신 API의 결과 json 형태가 어떻게 되나요? result 항목쪽 보여주세요.

0

이수종

image이게 제공하는 url누르면 나오는 화면이고

image이게 postman을 통해 보기 편하게 만든것

image혹시 몰라서 인증키 제외한 url도 가져왔어요

0

오준석

원하는 데이터가 result 안에 data 같네요.

jsonResult['result']['data'] 로 접근하시면 됩니다.

0

이수종

와 드디어 연결됐어요 감사합니다 api구조에 대해 좀 더 이해할 필요가 있을것같아요...

답변 너무 감사합니다!

Funtion vs StatelessWidget 질문!!!

0

667

1

provider lib 버전 업

0

276

1

궁금한 점이 두가지 있습니다.

0

252

1

오류가 납니다.

0

366

2

api오류

0

298

1

ios 디바이스에서 geolocator 는 안되는건가요?

0

305

1

ListView가 화면에 출력이 안됩니다.

0

327

1

MethodChannel 에 관해서 질문이요..

0

318

1

API 관련

0

237

1

공적 마스크 api 서비스 중단

0

228

2

provider를 쓰지 않았을 때 불러오는 방법

0

229

2

2장 ViewModel만들기- 데이터를 가져오는 코드 만들기 부분

-1

288

1

1장 메인화면 UI작성 강의 질문

0

305

2

ListView 궁금한점이 있습니다.

0

185

1

리스트 불러오기 오류

0

429

2

json 파일을 읽지 못하고 있어요;;

0

173

1

수원시 좌표를 넣었는데 서울이 나오는 건 어찌하나요?

0

208

1

현재 위치 기반 검색 질문입니다.

0

273

1

현재 위치 찾는 방법

0

259

1

안드로이드 스튜디오의 코드 스타일을 보면 강사님의 'Widget'은 색깔있는 글자인데 저는 검은 회색으로 나옵니다. 어떻게 강사님처럼 변경하는지요?

0

232

1

api 링크 주소를 강의처럼 수정하고 싶은데 어떻게 해야 하나요?

0

260

1

loading될 때 delay주는 방법

0

552

3

pub.dev 학습방법문의

0

180

1

SwaggerHub에서 execute 시 에러 발생

0

201

1