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통신을 하게 됩니다.
좋은 내용이네요. 감사합니다.
답글삭제감사합니다
답글삭제