retrofit은 http통신모듈로서 android에서 많이 사용한다고 합니다.
의 장점을 뽑을 수 있을 것 같습니다.
spring framework를 공부하면서 동시에 개발하고 있는데 사용방식이 많이 유사함이 느껴집니다.
2.0을 기준 입니다.
- 파싱 & value object로의 변환이 편하고
- template 방식으로의 사용
- 동기 & 비동기 지원
의 장점을 뽑을 수 있을 것 같습니다.
spring framework를 공부하면서 동시에 개발하고 있는데 사용방식이 많이 유사함이 느껴집니다.
2.0을 기준 입니다.
저의 환경으로는 json으로 서버와 값을 주고 받게 됩니다.
기본적인 튜토리얼은 http://square.github.io/retrofit/ 를 참고했습니다.
먼저 라이브러리 추가. (GRADLE)
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' //json파싱을 위한 주입 compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' //xml파싱을 위한 주입 compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
value object 작성
public class test { private String ret; public String getRet() { return ret; } public void setRet(String ret) { this.ret = ret; } }
Service작성
public interface TestService { @FormUrlEncoded @POST("/test") public Call<test>retroTest(@Field("param") String aa); }
어노테이션을 몇개 정리.
@POST("상세주소")를 이용하여 상세 주소를 설정합니다.
@GET/PUT/DELETE등도 사용가능합니다.
@HEARs를 이용해서 헤더 설정도 가능하고
@FormUrlEncoded을 사용하여 x-www-form-urlencoded를 설정하고
@Multipart를 이용한 파일전송 등도 설정 가능합니다.
동기/비동기 방식이 1.9버전에서는 선언하는 방식이 서로 달랐는데 2.0버전에서는 두가지의 차이가 없습니다. 사용에 따라서 동기/비동기가 나눠지는데 아래 설명하겠습니다.
Service생성 및 반환
public class repo { public TestService getService(){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://192.168.25.24:8080") .addConverterFactory(GsonConverterFactory.create()) // .addConverterFactory(SimpleXmlConverterFactory.create()) .build(); TestService service = retrofit.create(TestService.class); return service; } }
baseUrl을 설정하고, 저는 json만을 사용하기 때문에 GsonConverterFactory만 설정하였고 xml을 사용하시려면 SimpleXmlConverterFactory까지 설정 하시면 됩니다.
getService()를 이용하여 TestService에 대한 설정,생성,반환을 받습니다.
동기방식 사용
String result = null; TestService service = new repo().getService(); Call<test>c = service.retroTest("aa"); try { result = c.execute().body().getRet(); } catch (IOException e) { e.printStackTrace(); }
비동기방식 사용
final String[] result = {null}; TestService service = new repo().getService(); Call<test>c = service.retroTest("aa"); c.enqueue(new Callback () { @Override public void onResponse(Response response, Retrofit retrofit) { result[0] = response.body().getRet(); } @Override public void onFailure(Throwable t) { result[0] = "false"; } });
onResponse를 통하여 결과값을 받을 때 처리, 즉 callback방식으로의 처리를 하게 됩니다.
위의 방법으로 안드로이드(또는 다른 java플렛폼)에서 사용을 간단하게 http통신을 하게 됩니다.