Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
val answer1 = restClient.buildRequest<Answer1> {
} catch (e: Exception) {
viewState.showError(e.message.toString())
} catch (e: InterruptedException) {
viewState.showError(e.message.toString())
}
class TokenApi(private val api: Api, private val prefs: SharedPreferences) {
suspend fun request1(last: Long, autoView: Boolean): Answer1 {
val res = api.request1(last, autoView, headers())
saveToken(res)
return res?.body()
}
suspend fun request2(id: Long): Answer2 {
val res = api.request2(id, headers())
saveToken(res)
return res?.body()
}
private val TOKEN_KEY = "Token"
private val ID_KEY = "ID"
fun headers(): Map<String, String> {
return mapOf(
TOKEN_KEY to prefs.getString(Constants.Preferences.SP_TOKEN_KEY, ""),
ID_KEY to prefs.getLong(Constants.Preferences.SP_ID, -1).toString()
)
}
fun saveToken(res) {
val newToken = res?.headers()?.get(TOKEN_KEY)
val newID = res?.headers()?.get(ID_KEY)?.toLong()
if (newToken.notNull() && newID.notNull()) {
prefs.edit()
.putString(TOKEN_KEY, newToken)
.putLong(ID_KEY, newID)
.apply()
}
}
}
...
try {
val tApi = new TokenApi(api, prefs)
val answer1 = tApi.request1(1, false)
val answer2 = tApi.request2(1234)
} catch (e: Exception) {
viewState.showError(e.message.toString())
} catch (e: InterruptedException) {
viewState.showError(e.message.toString())
} finally {
viewState.hideProgress()
}
catch нужно поменять местами
fieldHashMap = restClient.fiedsMapForRequest2(1234)
headersHashMap = restClient.headers()
Как я сделал кастомный прерыватель Okhttp через котлиновские корутины