Rx를 포함해서 정리해봄
gradle 추가
implementation 'com.squareup.retrofit2:retrofit:x.x.x'
implementation 'com.squareup.retrofit2:converter-gson:x.x.x'
implementation 'com.squareup.retrofit2:converter-scalars:x.x.x'
implementation 'com.squareup.retrofit2:adapter-rxjava2:x.x.x'
클라이언트를 생성
Singleton 으로 만들어도 된다
알아서 효율적으로
public class ApiClient {
private static final String BASE_URL = "";
private static ApiClient tClient;
private Api tApi;
private ApiClient() {
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // RxRetrofit
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build();
transBoxApi = retrofit.create(Api.class); // request source
}
// Singleton
public static ApiClient getInstance() {
if(tClient == null) {
tClient = new ApiClient();
}
return tClient;
}
public Api getApiService() {
return tApi;
}
}
Api 작성
@Headers({
"Accept-Language: ko-KR, en",
"Accept: application/vnd.transbox.0+json"
})
@GET("qwe/auth/firebase/token/")
Single<ResponseBody> requestFirebaseToken(@Query("facebookToken") String facebookToken);
이런식으로 작성
@GET, @POST, @PUT, @DELETE
Json형식을 param으로 날릴땐 HashMap에 넣어서 보내도 됨.
@Body Map<String, Object> body
Map<String, Object> body = new HashMap<>();
body.put("userUid", user.getUid());
body.put("contactsInfo", contactsInfoList);
ApiClient.getInstance().getApiService().requestRemoveFriend(body)
Kotlin _
Create Client
class RetrofitClient {
companion object {
private const val BASE_URL = ""
fun create(): RetrofitService {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://")
.build()
return retrofit.create(RetrofitService::class.java)
}
}
}
타임아웃 시간 설정하기
Retrofit에서는 기본적인 3가지 타임아웃 시간 설정 값을 갖고 있다.
Connection timeout = 10sec
Read timeout = 10sec
Write timeout = 10sec
OkHttpClient를 사용하여 설정하기
val okHttpClient = OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build()
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.client(okHttpClient)
.build()
Okhttp Interceptor
OkHttpClient.Builder()
.addNetworkInterceptor(LogInterceptor())
class LogInterceptor: Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
Timber.d("intercepter: request method %s", request.method())
Timber.d("intercepter: request url %s", request.headers())
Timber.d("intercepter: connection %s", chain.connection())
val response = chain.proceed(request)
Timber.d("/////////////////")
Timber.d("intercepter: request requested url %s", response.request().url())
Timber.d("intercepter: request method %s", response.headers())
return response
}
}