[Android] Retrofit2

2021. 7. 16. 09:50개발/[Android]

Retrofit이란?

Retrofit은 API를 Java인터페이스로 변환하여 Rect 웹 서비스에 쉽게 연결 할 수 있게 하는 라이브러리이다. JSON 또는 XML데이터를 쉽게 처리 할 수 있으며 GET, POST, PUT, PATCH , DELETE 같은 Request를 모두 실행 할 수 있게 만든다. 또한 Retrofit은 네트워크 Request를 처리하기 위해서 OKHttp를 사용하며 Gson, Jackson과 같은 JSON변환기 라이브러리에 대한 지원도 제공한다.

Annotation 종류

  • Interface에서 Method 위에
@GET
@POST
@PUT
@PATCH
@DELETE
  • Method의 매개변수에서 ..
@Path    API 엔드포인트의 변수를 대채
@Query    어노테이션의 매개변수 값으로 쿼리 키 이름을 지정
@Body    Post 호출의 페이로드
@Header    어노테이션의 매개변수 값으로 헤더를 지정

사용방법

  1. Dependency 선언

     // Retrofit
     compile 'com.squareup.retrofit2:retrofit:2.1.0'
    
     // JSON Parsing
     compile 'com.google.code.gson:gson:2.6.1'
     compile 'com.squareup.retrofit2:converter-gson:2.1.0'
  2. Internet 권한 추가

     // in (AndroidManifast.xml)
     <uses-permission android:name="android.permission.INTERNET" />
  3. 모델 생성

     public class JsonResult<T> {
         public boolean success;
         public T bean;
         public List<Error> errors;
     ...
     }
    
  4. Retrofit 생성 ( Singleton )

     public class RetrofitInit {
         private static Retrofit retrofit;
         public static Retrofit getRetrofit(){
             if( retrofit == null )
             {
                 Retrofit.Builder builder = new Retrofit.Builder();
                 builder.baseUrl( ... );
                 builder.addConverterFactory( GsonConverterFactory.create() );  // 받아오는 Json 구조의 데이터를 객체 형태로 변환
                 retrofit = builder.build();
             }
             return retrofit;
         }
     }
  5. Retrofit 인터페이스 생성

     public interface UserInterface {
    
         @FormUrlEncoded
         @POST("member/join")
         Call<JsonResult<Empty>> join(@FieldMap HashMap<String, Object> parameters);
     }
  6. Retrofit 호출

userService.join(hashMap, new RetroCallback<JsonResult<Empty>>() {
            @Override
            public void onError(Throwable t) {
                makeToast(t.toString());
            }
            @Override
            public void onSuccess(int code, JsonResult<Empty> receivedData) {
                if(receivedData.success){
                    makeToast("성공");
                }else{
                    for(int i=0; i<receivedData.errors.size(); i++){
                        Log.d("userService.join > F",receivedData.errors.get(i).message);
                    }
                }
            }
            @Override
            public void onFailure(int code, JsonResult<Empty> receivedData) {
                for(int i=0; i<receivedData.errors.size(); i++){
                    makeToast(receivedData.errors.get(i).message);
                }
            }
        });

'개발 > [Android]' 카테고리의 다른 글

[Android] Android Architecture  (0) 2021.06.11
[Android] Dalvik & ART  (0) 2021.06.08