Retrofit2 프레임워크 사용 요약

앞말


Retrofit2는 매우 강력한 네트워크 로드 프레임워크로 서버에 데이터를 편리하게 요청하고 대응하는 Java 클래스로 변환할 수 있습니다. 다음은 제가 이 프레임워크를 사용한 요약입니다.
1. 의존 추가
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.google.code.gson:gson:2.7'
implementation'com.squareup.retrofit2:converter-gson:2.2.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'me.drakeet.multitype:multitype:3.4.4'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'

Retrofit2를 사용하면 사실 1, 2, 3, 7개의 의존만 추가하면 된다. 7개의 의존은 HTTP 로그를 보는 프레임워크로 HTTP가 보내는 데이터가 정확한지 확인할 수 있다.
2. Retrofit2를 통해 HTTP API를 Java로 변환하는 인터페이스 예:
public interface API {
    @GET("users/{userid}/followers")
    Call<Response<List<User>>> getUsers(@Path("userid") String userid);
}

여기에서 @GET의 괄호 안에 있는 내용은 @Path의 내용과 일치해야 하며, URL 인터페이스를 동적으로 보완하고 인터페이스의 데이터를 요청할 수 있습니다.
3. 필요한 작업을 초기화하고 이전에 만든 Java 인터페이스의 대상을 되돌려주는 도구 클래스 쓰기
public class RetrofitHttpUtil {

    public static API getApi(){
        //Okhttp HTTP 
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(logging)
                .build();
        // Retrofit 
        Retrofit retrofit=new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://stgapi.veervr.tv/")
                .client(client)
                .build();
        API api=retrofit.create(API.class);
        return api;
    }
}

4. 서버에 요청을 보내고 데이터를 반환받아 처리한다
   API api = RetrofitHttpUtil.getApi();
   Call<Response<List<User>>> call = api.getUsers(selectText.getText().toString());
   call.enqueue(new Callback<Response<List<User>>>() {
       @Override
       public void onResponse(Call<Response<List<User>>> call, retrofit2.Response<Response<List<User>>> response) {
       	   // 
           userList.clear();
           Response<List<User>> userSingleResponse = response.body();
           userList.addAll(userSingleResponse.getData());
           // 
           initFollowerMessage();
           // item
           addItem();
           multiTypeAdapter.notifyDataSetChanged();
       }

       @Override
       public void onFailure(Call<Response<List<User>>> call, Throwable t) {
       // 
           t.printStackTrace();
           Toast.makeText(MainActivity.this, " !", Toast.LENGTH_LONG).show();
       }
   });

참고:

  • 데이터 반환이 실패했을 때 Java 클래스가 반환된 데이터 형식과 일치하지 않거나 네트워크 연결에 문제가 생겨서 그런지 로그에서 문제점을 찾아내야 한다..
  • 여기서 간단한 @GET 메모 사용 실례를 들었을 뿐인데 사실 @POST, @PUT 등 메모의 사용법은 대부분 비슷하다. 주의해야 할 것은 그에 대응하는 메모의 사용이다. 예를 들어 @POST는 @Field에 대응하여 파라미터를 지정한다
  • 물론 Retrofit2의 사용은 여기에 그치지 않습니다. 천천히 연구해 보세요
  • 좋은 웹페이지 즐겨찾기