I have and app in back4app and I'm trying to get data with retrofit but I'm getting 401 response.
I add these header params
- X-Parse-Application-Id
- X-Parse-REST-API-Key
- Content-Type
I try to add X-Parse-Session-Token but has the same response. When I check by postman I get the data correctly
Here is my code:
ApiService
@GET("users")
fun getPlayers(): Call<PlayersResponse>
PlayerResponse:
class PlayersResponse {
@SerializedName("results")
var players: List<PlayerResponse>? = null
inner class PlayerResponse {
private val objectId: String? = null
private val username: String? = null
}
}
RetrofitService
fun <S> createService(serviceClass: Class<S>): S {
val httpClient = OkHttpClient.Builder()
val builder = Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
httpClient.addInterceptor { chain -> return@addInterceptor addHeaderParams(chain) }
httpClient.connectTimeout(HTTP_TIMEOUT_SECS.toLong(), TimeUnit.SECONDS)
httpClient.readTimeout(HTTP_TIMEOUT_SECS.toLong(), TimeUnit.SECONDS)
val retrofit: Retrofit = builder
.baseUrl(URL_BACKEND)
.client(httpClient.build())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
return retrofit.create(serviceClass)
}
private fun addHeaderParams(chain: Interceptor.Chain): Response {
val request = chain.request().newBuilder()
val originalHttpUrl = chain.request().url
val newUrl = originalHttpUrl.newBuilder().apply {
addQueryParameter(HEADER_APP_ID, APP_ID)
addQueryParameter(HEADER_API_KEY, API_KEY)
addQueryParameter(HEADER_CONTENT_TYPE, CONTENT_TYPE)
}.build()
request.url(newUrl)
return chain.proceed(request.build())
}
Function to get Players
override suspend fun getPlayers(mapper: PlayersMapper): DataResult<List<Player>> {
val client: ApiService = RetrofitService.createService(ApiService::class.java)
val players = withContext(Dispatchers.IO) { client.getPlayers().execute() }
return if (players.isSuccessful) {
DataResult.Success(mapper.map(players.body()))
} else {
DataResult.Error(Exception(players.message()))
}
}