티스토리 뷰




오랜만에 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


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크