티스토리 뷰
오랜만에 Retrofit을 이용해서 http통신을 하려니 영익숙하지 않다.
그래서 샘플을 만들어서 나중에 까먹으면 보려고 포스팅을한다.
거기에 요즘 관심있는 RxJava도 이용해보자
해당 포스팅은 아래의 사이트를 참고하여 작성하였다.
https://medium.freecodecamp.org/rxandroid-and-retrofit-2-0-66dc52725fff
권한설정
통신을 이용하기위한 인터넷 퍼미션을 AndroidManifest.xml에 등록해주자
<uses-permission android:name="android.permission.INTERNET" />
그래들에 추가
dependencies {
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
}
위와같이 rxandroid와 레트로핏을 이용하기 위한 그래들을 추가해주자.
모델생성
레트로핏의 사이트에서 제공하는 url(https://api.github.com/users/list)을 가지고 오늘 테스트를 해보도록 하겠다.
해당주소(https://api.github.com/users/list) 를 브라우저에 입력후에 리턴값을 복사한다.
위의 데이터를 가지고 직접 모델클래스를 만들어도 되지만 해당 값을 붙여넣으면 모델클래스를 만드는 사이트를 이용하자
http://www.jsonschema2pojo.org/
우의 사이트에서 복사한 값을 붙여넣은 후 모델 클래스를 생성한다.
받은 파일을 아래와같이 나의 프로젝트의 적당한 폴더에 넣는다.
그리고 여기에 toString() 메소드를 오버라이드 받아서 값을 입력해준다.(추후 테스트를 위함)
toString() 메소드를 오버라이드 받아서 클래스의 프로퍼티들의 값을 출력해줄때 AndroidStudio에서 편리한 기능을 제공해준다.
우클릭 > Genrate.. > toString 한후 전체 프로퍼티를 선택하여 확인을 누르면 위와같이 toString()에서 해당 값이 출력됨을 알수있다.
서비스 인터페이스 생성
레트로핏에서는 RestAPI방식을 이용할때 interface에 어노테이션을 이용하여 정의하는 식으로 사용한다.
아래와같이 TestService 인터페이스를 만들고
getUserList() 메소드를 작성해준다.
public interface TestService {
@GET("users/list")
Observable<UserList> getUserList();
}
네트워크 매니저 생성
필자같은 경우는 여러 api를 관리하는 매니저클래스를 싱글턴으로 만들어서 사용한다.
아래와같이 네트워크 매니저를 만들어서 Observable를 리턴받는 메소드를 만든다.
public class NetworkManager {
private static NetworkManager instance;
private Retrofit retrofit;
private TestService service;
public static NetworkManager getInstance() {
if (instance == null) instance = new NetworkManager();
return instance;
}
public NetworkManager() {
retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://api.github.com/")
.build();
service = retrofit.create(TestService.class);
}
public Observable<UserList> getUserList() {
return service.getUserList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
;
}
}
값을 화면에 출력해보자
@Override
public void goRetro() {
NetworkManager.getInstance().getUserList().subscribe(new Action1<UserList>() {
@Override
public void call(UserList userList) {
view.showText(userList);
}
});
}
위와 같이 싱글턴으로 만들어진 NetworkManager에서 구독하여 화면에 뿌려준다.
받아온 값이 정상적으로 출력되는것을 확인할 수 있다.
위의 예제는 아래의 주소에서 확인할 수 있다.
https://github.com/karrel84/rxretrofit2sample.git
'개발 > ANDROID' 카테고리의 다른 글
카카오톡으로 이미지나 메세지 보내기 (0) | 2018.06.25 |
---|---|
ANDROID STUDIO 에서 SHA-1 키 가져오기 (0) | 2018.03.23 |
[android] 다중 애니메이션 적용 (0) | 2017.10.27 |
[안드로이드] REALM 간단히 사용해보기 (0) | 2017.08.30 |
[GITHUB] Repository test has failed. (0) | 2017.08.24 |
- Total
- Today
- Yesterday