سلام خدمت شما یک کلاس به اسم ApiServiceProvider میسازیم
و داخلش دو متد که یکیش برای فارسی هست و دیگری برای انگلیسی.
بعد جایی که میخوایم استفاده کنیم از هر کدوم که مد نظرمون هست استفاده می کنیم.
سلام علی جان مشخصاً همه چیز دست خودته میتونی جدا جدا بسازی یا نه یه اینستنس نگه داری کنی و طبق نیازت ازش استفاده کنی من که همیشه داخل هر متد یه بار نمونه گرفتم و مشکلی نداشته مثل کد زیر:
object ApiServiceContainer {
private var apiService: ApiService? = null
private var authenticationApiService: AuthenticationApiService? = null
fun getApiService(): ApiService {
if (apiService == null) {
val retrofit = Retrofit.Builder()
.baseUrl(EndPoints.API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
apiService = retrofit.create(ApiService::class.java)
}
return apiService!!
}
fun getAuthenticationApiService(): AuthenticationApiService {
if (authenticationApiService == null) {
val retrofit = Retrofit.Builder()
.baseUrl(EndPoints.Authentication_API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
authenticationApiService = retrofit.create(AuthenticationApiService::class.java)
}
return authenticationApiService!!
}
}
نمونه پیشرفته ترشم میشه مثل زیر منتهی اینجا فقط یه url دارم:
object ApiServiceContainer {
private var apiService: ApiService? = null
fun getApiService(): ApiService {
if (apiService == null) {
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.BODY
val httpClient = OkHttpClient.Builder()
httpClient.addInterceptor { chain ->
val original = chain.request()
// Request customization: add request headers
val requestBuilder = original.newBuilder()
.header("Authorization", "Bearer " + token) // <-- this is the important line
.header("Accept", "application/json")
.header("Content-Type", "application/json")
val request = requestBuilder.build()
chain.proceed(request)
}
httpClient.connectTimeout(30, TimeUnit.SECONDS)
httpClient.readTimeout(30, TimeUnit.SECONDS)
httpClient.addNetworkInterceptor(logging)
val okHttpClient = httpClient.build()
val gson = GsonBuilder()
.setLenient()
.create()
val retrofit = Retrofit.Builder()
.baseUrl(EndPoints.API_BASE_URL)
.addConverterFactory(
GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build()
apiService = retrofit.create(ApiService::class.java)
}
return apiService!!
}
}