Table of Contents
retrofit2 설정하기
간단히 retrofit2 를 이용해 API 서버에서 데이타를 가져올 수 있다.
비동기처리도 동시에 해주므로 편하게 코딩할 수 있다.
샘플 json 파일
서버에서 넘겨받는 샘플 json 데이타는 아래와 같다.
{
"code": "000",
"message": "OK",
"data": [
{
"id": 2,
"search_string": "김치찌개"
},
{
"id": 3,
"search_string": "부대김치찌개"
},
{
"id": 1,
"search_string": "김치"
}
],
"paging": {
"pageNo": 0,
"pageSize": 5,
"resultCount": 3,
"totalCount": 3,
"totalPages": 1,
"first": true,
"last": true
}
}
DTO 클래스 생성
public class AutoCompleteItem {
int id;
// 필드명이 일치하지 않으면 지정해 줄 수 있다.
@SerializedName("search_string")
String searchString;
// Getter()
}
public class Paging {
int pageNo;
int pageSize;
int resultCount;
int totalCount;
int totalPages;
boolean first;
boolean last;
// Getter()
}
public class AutoCompleteResponse {
String code;
String message;
List<AutoCompleteItem> data;
Paging paging;
// Getter()
}
Client 생성
디버깅이 필요한 경우, 코맨트 친 부분을 해제해서 로그를 확인할 수 있다.
public class MGApiClient {
private static final String BASE_URL = "https://<API 서버 아이피>/";
private static Retrofit retrofit;
public static Retrofit getApiClient() {
// HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
// interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
// OkHttpClient client = new OkHttpClient.Builder()
// .addInterceptor(new Interceptor() {
// @Override
// public okhttp3.Response intercept(Chain chain) throws
// IOException {
// Request request = chain.request().newBuilder()
// .addHeader("key", "value")
// .addHeader("HEADER","HEADER Value")
// .build();
// return chain.proceed(request);
// }
//
//
// })
// .addInterceptor(interceptor)
// .build();
if(retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
// .client(client) // Logging
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
인터페이스 생성
헤더와 파라미터를 지정해 줄 수 있다.
public interface MGApiInterface {
@GET("v1/esautocomplete/")
Call<AutoCompleteResponse> getAutoComplete(
@Header("Authorization") String token,
@Query("q") String query,
@Query("s") int size,
@Query("p") int page
);
}
실행하기
MGApiInterface apiInterface = MGApiClient.getApiClient().create(MGApiInterface.class);
Call<AutoCompleteResponse> call = apiInterface.getAutoComplete(
getString(R.string.mgapi_key),
"ㄱ",
5,
0);
call.enqueue(new Callback<AutoCompleteResponse>() {
@Override
public void onResponse(@NotNull Call<AutoCompleteResponse> call, @NotNull Response<AutoCompleteResponse> response) {
assert response.body() != null;
AutoCompleteResponse autoCompleteResponse = response.body();
for (AutoCompleteItem item : autoCompleteResponse.getData()) {
Log.d("getKeyHash", item.getSearchString());
}
}
@Override
public void onFailure(@NotNull Call<AutoCompleteResponse> call, @NotNull Throwable t) {
Log.e("getKeyHash", t.getMessage());
}
});