티스토리 뷰
안녕하세요 오늘은 retrofit2 간단한 예제를 살펴 보실텐데요
일단 보시요
Retrofit 라이브러리는 제가 사랑하는 Square라는 회사에서 만든 REST API통신을 위한 Android/JAVA 라이브러리 입니다.
유틸리티 어플리케이션이 아닌 좀더 큰 범위의 서비스를 사용한다면 클라이언트 <-> 서버 통신은 빼놓을수 없이 구현해야 할것입니다.
그만큼 안드로이드 어플리케이션에서는 서버와의 통신이 많을것이고 이를 잘 다루어야 합니다.
AsyncTask,HttpUrlConnection을 사용해서 직접 네트워크 통신을 구현하려면 여러가지 귀찮은 작업들이 많습니다.
1. 네트워크 통신 연결/해제
2. 가져온 데이터 파싱
3. Json통신의 경우, Json데이터<-> Class 변환
4. 각종 에러처리
API통신을 이용하는 서비스에서 정말 편하게 사용할 수 있는 Retrofit을 소개해드립니다.
사용 예시
GitHub에서 특정 사용자의 repository 목록을 가져오는 통신이 있다고 가정해보겠습니다.
API주소는 'http://api.github.com/users/사용자 ID/repos' 입니다.
만약 사용자 ID에 ParkSangGwon를 넣을경우 아래와 같은 리턴 Json값을 받아볼 수 있습니다.
출처: http://gun0912.tistory.com/30 [박상권의 삽질블로그]
[
{
"id":35079604,
"name":"DLog",
"full_name":"ParkSangGwon/DLog",
"owner":{...},
"private":false,
},
{
"id":35081014,
"name":"ObjectUtils",
"full_name":"ParkSangGwon/ObjectUtils",
"owner":{...},
"private":false,
},
{
"id":35081259,
"name":"UpdateCheck",
"full_name":"ParkSangGwon/UpdateCheck",
"owner":{...},
"private":false,
}
]
우선 gradle 에 라이브러리를 추가해야되는데요
dependencies {
compile 'com.squareup.retrofit2:retrofit:2.1.0' // Retrofit
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3' // Gson 변환을 위한 converter
}
1. Interface Class 선언하기
user를 파라미터로 받아 API URL을 완성해서 GET방식으로 요청할 것입니다.
public interface GitHubService {
@GET("/users/{user}/repos")
List<Repo> listRepos(@Path("user") String user);
}
2. Interface Class 구현하기
Retrofit에서 제공하는 restAdapter를 이용해서 Base URL(https://api.github.com)을 지정해주고 GitHubService 변수를 만들어 줍니다.
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();
GitHubService service = restAdapter.create(GitHubService.class);
3. Repo클래스 만들기
앞서 예시에서 호출했을때 나온 json을 받아줄 클래스를 생성해줍니다.
json의 키에 해당하는 값들을 변수 이름으로 지정해주면 됩니다.
public class Repo {
int id;
String name;
String full_name;
...
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFull_name() {
return full_name;
}
public void setFull_name(String full_name) {
this.full_name = full_name;
}
}
4. 서비스 호출해서 리스트 가져오기
1번에서 선언한 함수를 사용하면 3번의 Repo클래스들의 리스트형태를 결과로 받아 볼수 있습니다.
List<Repo> repos = service.listRepos("ParkSangGwon");
물론 GET방식 이외에도 POST,PUT,DELETE,HEAD등의 다양한 Request방식을 지원합니다.
GET방식의 경우 위의 예제방식 이외에도 Query방식으로도 호출할수 있습니다.
Retrofit에서 사용할수있는 모든 방식은 공식홈페이지에서 확인해 보실 수 있습니다.
http://devflow.github.io/retrofit-kr/
[안드로이드]Retrofit에서 Interceptor를 이용해 쿠키/세션 유지하는 방법
출처: http://gun0912.tistory.com/30 [박상권의 삽질블로그]
'android' 카테고리의 다른 글
[android] hybride web에서 webview 자동로그인 (0) | 2017.11.13 |
---|---|
[android] onCreateWindow not working (2) | 2017.10.17 |
[android] PagerAdapter에 대해서 (FragmentPagerAdapter와 FragmentStatePagerAdapter) (0) | 2017.08.17 |
[android] webview scrollbar not visiable (0) | 2017.07.05 |
[android] java.lang.IllegalStateException: Unable to create layer for WebView (0) | 2017.06.30 |
- Total
- Today
- Yesterday
- Swift button text underline
- 쇼미더머니6
- Bundle main infodictionary swift 4
- Sandbox account logout
- Swift textField max length
- 위메프
- swift actor
- Swift app version check
- Sandbox test login on
- Swift version code
- Swift check notch
- Swift button underline programmatically
- [WindowScene] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
- Android
- How to get version swift
- SceneDelegate error
- android notification
- Swift label underline storyboard
- [WindowScene] Failed to Error
- swift autoclosure
- autoclosure
- Swift 노치 구분
- 맛집
- firebase remote config
- 샤브샤브
- swift uitextfield 글자수 제한
- iPhone X safe area size
- Sandbox account sign out
- wwdc21 actor
- Swift 앱 버전
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |