# retrofit2

53개의 포스트

Retrofit2 Api 호출 함수 가독성 높이기

0. 개요 기존의 Retrofit 호출 코드 위의 코드가 같은작업을 하는게 5개 겹쳐져있다. 가독성도 떨어지고 무엇보다 시간 낭비이다. 당시에는 시간이 촉박해 마감을 목표로 하느라 하나의 함수를 구현하는게 어떤 오류를 불러올지 몰라서 복붙으로 여러개 배치했지만 코드가 클린하지 못하다. 하나의 함수에 매개변수로 지역이름을 받는다면 얼마나 간편하고 좋을까 해서 시작한다. 1. 리플랙션 vs 직접 매핑 1) 리플랙션은 코드가 실행 중인 프로그램의 메타 데이터(즉, 그 자체의 구조와 특성)에 액세스하고 수정할 수 있게 함. 프레임워크 라이브러리, 플로그인 시스템, 직렬화 및 역 직렬화에 주로 사용 장점: 유연성, 코드 양 감소 단점: 성능, 안정성, 가독성 2) 직접 매핑 특정 값을 또는 객체를 명시적으로 다른 값 또는 객체에 매핑하는 것, 고정된 구조에 변경이나 확장이 그리 빈번하지 않을 때 유용 고정된 매핑, 성능 중심의 애플리케이션, 간

2023년 8월 25일
·
0개의 댓글
·

Retrofit2 통신 예시

나를 위한 기록 Retrofit2 통신에 필요한 것 데이터 클래스 Interface Retrofit.Builder 인스턴스 데이터 클래스 예시 인터페이스 GET 예시 POST 예시 Retrofit2 인스턴스 예시1 예시 2 예시 1의 result.toString() 로그 참고 https://minchanyoun.tistory.com/44

2023년 7월 8일
·
0개의 댓글
·

안드로이드 com.google.gson.stream.MalformedJsonException: Unterminated object at line 관련 에러

상황 안드로이드에서 Postman의 Mock서버로 Post 통신을 테스트 중이었다. retrofit2 failure 로그 안드로이드에서 통신 실패 로그가 떴다! 하지만 서버로그에는 통신이 잘 완료된 것으로 떴다. 아래는 안드로이드의 로그 내용이다. 로그는 다음과 같다. ` 해결 과정 후.. 당황하지 않고 차근차근 읽어보고 서버 응답을 요리조리 바꿔보고 구글링도 해봤다. 이 에러는 서버의 응답 메시지에 문제가 있는 것으로 보인다!! 알고보니 서버의 응답 데이터에 쉽표 하나를 빼먹었다!!!! M

2023년 6월 25일
·
0개의 댓글
·
post-thumbnail

[Android] Retrofit2 사용 시 response body가 비어있는 API 대응하기

보통 REST API 의 응답 객체는 위와 같이 상태, 메세지, 데이터 형식으로 주어지는 것이 일반적이다. 따라서 파라미터 값에 따라 리스폰스 반환 값을 만드는 데 실패하게 되는 경우에도 어쨌거나 '실패'라는 응답을 받게 된다. 그러면 클라이언트 측에서는 해당 리스폰스에 따라 예외처리를 해주면 된다. 그러나! 여러 프로젝트를 진행하다보면 api 응답 형식이 각자 다른 것을 알 수 있다. 나의 경우 이번 프로젝트에서 파라미터 값에 따라 리스폰스가 아예 비어있는 경우가 존재하는 api를 다루게 되었다. 서버 개발자에게 실패의 경우에도 리스폰스를 만들어달라 할 수 있다면 그것이 베스트일테지만, 나는 클라이언트 측에서 response body가 null인 경우에 대응해보고자 노력해보았다. 그리고 혹시 또 나와 같은 상황에 처해있는 사람이 있을 수 있으니 과정과 결과를 공유해보고자 한다. 문제 상황 주어진 상황은 친구를 추가하

2023년 5월 20일
·
0개의 댓글
·
post-thumbnail

[retrofit2 + compose] Android HTTP 통신 (with. kakao search API)

Kakao API 카카오 Developers 사이트 내에서 제공해주는 이미지 검색API를 연결하여 사용합니다. 간단히 요약 [내 애플리케이션 > 앱 설정 > 요약 정보] 내 REST API 키 확인 이미지 검색하기 API 문서 확인 API Tester Talend 크롬 확장 프로그램 설치 **API Tester 확장 프로그램 열어주고 API

2023년 4월 20일
·
1개의 댓글
·
post-thumbnail

[Kotlin] Unsplash API를 이용한 사진 검색기 # 1

✍ Project Goal >Retrofit2 를 이용한 API 서버통신 >Coroutine, Flow 를 사용해서 비동기 작업 >MVVM 패턴으로 구현 📑 Development Flow >1. Unsplash API 호출 >2. UI 작업 >3. 비지니스 서비스 구현 📷 Unsplash API 호출 👉 공식 문서에서 서비스 등록 Unsplash 개발자 페이지 로그인 후 개발자 페이지에서 Applications 을 등록할 수 있는데, 등록 후 서비스에서 사용할 Access Key 를 받을 수 있다. 👉 데이터 모델 만들기 Unsplash 공식문서 위 링크는 공식문서에서 이 프로젝트에서 사용할 **'G

2023년 4월 12일
·
0개의 댓글
·
post-thumbnail

[Retrofit2] Dynamic Proxy 를 사용하는 이유

Retrofit2를 파다보니 Dynamic Proxy라는 기술을 사용해서 인터페이스에 대한 구현 부분을 런타임에 만들어주는 기능을 제공한다고 한다. 이부분은 java의 API 중에 java.lang.reflect 내에서 Proxy#newProxyInstance() 에서 맡아서 처리해주고 있다. 그럼 일단 Proxy가 하는 일과 Retrofit의 Dynamic Proxy의 구현에 대해서 찾아보려고 한다 Proxy 일단 프록시를 검색하면 프록시 서버의 필요성 때문에 프록시 라는 단어가 탄생했다. 이것은 클라이언트가 서버의 중계기인 프록시 서버에서 대리로 통신을 수행하는 것을 바로 프록시라고 한다. 이부분은 모두 알고있는 부분이기도 한데 이 프록시가 가지는 장점이 아주많다 캐시를 이용해서 저장해

2023년 3월 22일
·
0개의 댓글
·

Retrofit2 Header이용

Retrofit2 Header이용 레트로핏을 사용하여 로그인을 구현하는중 토큰을 이용한 로그인으로 인해 Header의 이용방법이 필요해 졌다. SessionID가 들어가야할 Authorization에 값을 담아 주기 위해 새로 설정을 바꿔주어야 했다. 사용방법 위의 방식처럼 Response함수에 이노테이션 Header를 담아서 보내면 된다. 이 방법은 Httpcontext.request.header에서 찾을수 있도록 하는것 → SessionID를 부여받고 저장을 하기 위함 Annotation 종류 (서버의 파일(데이터)에 대한 CRUD 기준, 서버 DB에 대한 쿼리 기준) 주요 메소드 @GET : 바디 없이 URL에 모든 정보를 담아 요청한다. 서버에 데이터를 조회(Read, SELECT) 할 때 쓰며 @Query,

2023년 3월 17일
·
0개의 댓글
·

안드로이드 스튜디오 Retrofit2 사용 방법

서버와 연결을 위해 Retrofit을 사용하려고 합니다. 그 사용 방법에 대한 글입니다! vue image step.1 build.gradle 설정하기 app 수준의 build.gradle에 사용하고자 하는 retrofit과 gson, okhttp등을 등록합니다. (그대로 복사해서 넣어주세요) step.2 data class 만들기 서버로부터 받을 데이터가 어떤 형식인지 보고 그대로 data class를 만들어주시면 됩니다. (예시입니다) 데이터 형식은 api 명세서에 제시되어있습니다. > 이때 더 필요한 정보가 있거나 설명이 필요

2023년 1월 29일
·
0개의 댓글
·
post-thumbnail

Retrofit2을 이용해 안드로이드 스튜디오에 서버의 데이터를 가져오기

✔️나는 MySql과 spring을 연동하여 Mysql의 데이터를 tomcat 서버에 데이터를 Json 형식으로 올려두었다. ✔️서버에 올려둔 Json 형식의 데이터를 안드로이드 스튜디오에 가져오고자 한다. > ### 우리가 필요한 것? 1. Retrofit Retrofit은 서버와 클라이언트 간 http 통신을 위한 라이브러리로, API 인터페이스가 호출가능한 객체로 변환해주는 클래스를 제공한다. https://square.github.io/retrofit/ 2. Gson Gson은 json구조를 띄는 직렬화된 데이터를 JAVA의 객체로 역직렬화, 직렬화를 해주는 java 라이브러리 이다. 즉 Json Object JAVA Object 양방향 변환을 해주는 라이브러리이다. 0. 준비단계 > ① manifest.xml 설정 ② build.gradle(Module) 설정 ① manifest

2022년 12월 4일
·
0개의 댓글
·
post-thumbnail

[Android/Error] Expected a string but was BEGIN_OBJECT at line 1 column 42 path $.data

[Android/Error] Expected a string but was BEGIN_OBJECT at line 1 column 42 path $.data 📌 이슈 Retrofit2 통신 시 JSON response 를 받아와 파싱할 때 통신 실패가 떴다. > java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 42 path $.data onFailure 된 부분의 메시지를 읽어보니 string 타입을 예상했지만 실제로는 OBJECT 왔다고 한다. ![](https://velog.velcdn.com/images/soyoung-dev/post/a1e63d07-81aa-4885-9d2

2022년 11월 14일
·
0개의 댓글
·
post-thumbnail

[Android/Kotlin] 네트워크 결과값을 Flow변환 및 Sealed 클래스로 관리하기

Retrofit2에서 Call과 Response의 차이점 call or response in Retrofit? 네트워크 연결을 도와주는 retrofit라이브러리에서는 결과값을 감싸주는 Wrapper클래스로 Call클래스와 Response클래스를 지원해준다. 그렇다면 두 클래스의 차이는 무엇이고 어떤 것을 사용해야 할까? Call 클래스 Call클래스를 사용하면 enqueue callback함수를 사용할 수 있으며 이는 비동기작업이 아닌 동기적인 작업을 수행할 때 용이하다. Response 클래스 그러나 코루틴이나 RxJava와 같은 비동기 작업을 수행할 때에는 enqueue callback(콜백함수)가 필요하지 않으며, 결과값만 사용하면 되기 때문에 Response클래스를 사용하자. ![](ht

2022년 11월 11일
·
0개의 댓글
·
post-thumbnail

[Android] Retrofit ? (with MVVM)

📌 Retrofit? Android에서 REST API 통신을 지원하기 위해 사용하는 라이브러리 Type-Safe 한 HTTP 클라이언트 라이브러리 전달받은 데이터를 Client가 필요한 형태의 객체로 전달받을 수 있음. 존재하는 HTTP 통신 라이브러리 중 가장 많이 사용되는 라이브러리. Square 사에서 개발, Square 사에서 개발한 OkHttp 라이브러리의 상위 구현체. AsyncTask 없이 Background에서 작업 수행 후 Callback을 통해 Main Thread에서 동작. Retrofit 장점 빠른 성능 OkHttp는 AsyncTask를 사용, AsyncTask 보다 성능이 3~10배 좋다고 한다. 간단한 구현 - 반복된 작업을 라이브러리에 남겨서 처리 ex) HttpUrlConnection의 Connection , `Input /

2022년 11월 7일
·
0개의 댓글
·
post-thumbnail

Retrofit2 + Gson 왜 써?

Gson이란? | Json → Java 객체, Java 객체 → Json 의 변환을 도와주는 라이브러리입니다. 그러면 Gson과 Retrofit2를 같이 사용하는 이유를 알아보겠습니다. 기본적으로 Retrofit2를 이용하여 서버통신을 진행할 경우, Json의 변수 명에 맞춰 Response Data Class를 생성해주어야 합니다. EX) | 예시를 위해서 Json Response 를 극단적으로 설정해두었습니다...😅 하지만 위의 코드를 작성하는 과정에서 팀의 코딩 컨벤션과 일치하지 않는 경우가 생길 수 있습니다. 해당 팀에서 Snake Case를 사용한다면 updateAt 변수가 컨벤션에서 어긋나게 되고, Camel Case를 사용한다면 phone_number 변수가 컨벤션에서 어긋나는 것을 확인할 수 있습니다. 위의 경우에서 Gson 라이브러리를 Retrofit2와 함께 사용합니다. EX) 위의 방식을 이용하여 해당 팀의 컨벤션에

2022년 10월 30일
·
0개의 댓글
·

[Android] Retrofit에 대하여(이론)

요즘 팀 프로젝트 개발을 하느라 BackEnd 분과 협업을 하게 되어 Retrofit을 사용하게 되었는데, 쓰다 보니 이게 서버와의 통신을 위해 사용한다는 점과 대략적인 것들만 알고 있지 제대로 된 이해는 하지 않고 있다는 걸 깨닫고 공부도 할 겸 정리 포스팅을 올려보려고 합니다. Retrofit 공식 사이트 : https://square.github.io/retrofit/ 💡 Retrofit이란? Retrofit을 사진에 적혀있는 대로 설명하자면, Android 및 Java 용 type-safe HTTP client인데요. 여기서 말하는 type-safe란 단어 그대로 타입에 안정적인 게

2022년 10월 6일
·
0개의 댓글
·
post-thumbnail

안드로이드 Bitmap 최적화(Resize)한 다중 이미지 서버에 업로드하기 2 - 서버로 보내기 (코루틴(Coroutine), Retrofit2)

시작 > 혼자 공부하면서 정리하고 싶은 부분을 작성한 글입니다 👀 함께 공부하는 사람에게는 도움이 되었으면 좋겠고, 혹시 잘못 이해하고 작성한 부분에 대한 피드백을 주신다면 감사히 받겠습니다 🙇🏻‍♀️ 이제 우리는 지난 시간 열심히 다이어트 시켜준 비트맵을 서버로 떠나 보낼 일만 남았다. 이 과정은 무던히 잘 넘길 줄 알았으나.. 비트맵을 압축하는 과정에서 파일 용량에 따라 속도가 다르다보니 기존(사용자가 선택한 순서)과 다르게 순서가 꼬이는 사태가 발생했다. 순서를 지키기 위해 사진 한 장이 압축될 때까지 기다렸다가 다음 사진을 압축하자니, 운 나쁘게 대용량 사진 10장을 업로그 해야 한다면?! 10초 이상의 시간이 지체될 것이고 사용자는 이를 무한로딩으로 인식하고 앱을 종료해버리고 말 것이다 🥲 🎈 서버로 보낼 여러 개의 이미지(file) 담기 **위의 문제를 해결하기 위해 HashMap에 저장한 후, 사용자가 선택한 사진

2022년 8월 31일
·
0개의 댓글
·

ViewHolder에 Retrofit... 넣어도 되나요

* 거두절미하고, 안됩니다.* 하지만 아무것도 모르는 나는 ViewHolder에 Retrofit을 넣을 수밖에 없었던 피치못할 사정이 있었는데.... 얼레벌레 내가 맞닥뜨린 상황 사용자가 검색한 가수와 비슷한 느낌의 가수를 추천해주는 API를 쓰고 있었다. 근데 이 API가 이미지를 제공하지 않아서 카카오 이미지 검색 API를 활용해 어울리는 가수 이미지를 찾으려 했다. 그래서 가수 정보 데이터를 활용하는 ViewHolder 안에 카카오 이미지 검색 API와 통신하는 Retrofit을 넣었다. 그러니까 정리하면, RecyclerView에 API A가 준 데이터를 넣어야 하는데, API A의 데이터에 API B가 준 데이터를 추가하고 싶지만 어떻게 데이터를 수정하고, 어디서 어떻게 어댑터를 선언하면 좋을지 모르겠어서 냅다 Retrofit을 ViewHolder에 넣었다!!!! **최대한 주어진 데이터 클래스 내에서 해결

2022년 8월 29일
·
0개의 댓글
·
post-thumbnail

Retrofit2 enqueue(비동기)를 동기로 바꾸기

데이터가 들어오면 그 순서대로 처리가 되는 줄 알았는데 중구난방이었다. 당연함. 난 Retrofit을 enqueue로 실행시켰고, 이건 비동기기 때문임. .....생각 않고 코드를 짰다가 낭패를 봤다… 우선 예제로 돌릴 나의 삽질 코드부터 보자. 1. 순서대로 Retrofit을 생성해 돌릴 거니까, 반복문에 넣자! 2. getArtistImge()는 이렇게 생겼다! 로그를 찍어서 정말 순서대로 돌아가는지 확인해볼까? n / 4 번째 도는 중 → 반복문이 돌아가면서 retrofit 실행 실행된 retro

2022년 8월 29일
·
1개의 댓글
·

Kotlinx.serialization

Retrofit2의 Converter로 Gson을 사용할 때 Gson을 포함해 Jacson, Moshi 등의 Converter Library는 모두 Java 언어로 개발이 되어있다. 그러니 코틀린에서 사용 가능하지만, 완벽하게 호환되지 않는다. Kotlinx Serialization - 코틀린에 가장 적합한 Json Converter 여기 글에서 잘 정리해두었다. 자바로 만든 라이브러리다 보니 코틀린 data class의 장점인 default value 문법을 무시한다는 게 문제다. primitive 타입의 필드는 0, reference 타입의 필드는 null로 처리해버린다. 게다가 gson 컨버터는 코틀린의 null-safety를 준수하지 않는다. not null field인데 null이 들어가 버린다. 그래서 코틀린에서 Gson, Jacson, Moshi 등 자바 컨버터 라이브러리를 쓸 때는

2022년 8월 24일
·
0개의 댓글
·

[Flask+Android(Kotlin)] Flask REST API 서버를 만들고 Android Retrofit2 로 서버에서 데이터 가져오기_2

https://velog.io/@dldmswo1209/FlaskAndroidKotlin-Flask-REST-API-서버를-만들고-Android-Retrofit2-로-서버에서-데이터-가져오기 이전에 쓴 글에서 "Flask 로 AI 모델 연결 문제를 해결할 수 있을까?" 했는데!!! 해결했다!! 전에는 소켓통신을 사용해서 채팅방을 나갔다 오거나, 앱을 껐다 켜면, 서버를 껐다가 다시 켜야되는 1회성 문제가 있었는데, 지금은 서버만 켜져있으면 아무 문제 없이 잘 동작한다. 📌 결과화면 서버에도 데이터가 잘 전달되는 것을 볼 수 있다. ![](https://velog.velcdn.com/images/dldmswo1209/post/ef6fdd4e-6a48-4774-8f79-b00d509f45b8/image

2022년 8월 16일
·
0개의 댓글
·