سلام اگر چند تا api مختلف داشته باشیم که مثلا خبر انگلیسی رو از گوگل نیوز بگیره و خبر فارسی را از خبرگزاری داخلی.
چطوری باید api service پیاده سازی کنیم؟
سلام خدمت شما یک کلاس به اسم 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!!
}
}