Простой запрос для получения данных в формате json. Проблема в том, что при успешной(!) отправке запроса код onResponce не выполняется вообще никак - ни результата, ни ошибки, ни исключений - ничего, как будто программа просто пропускает эти строки. При этом onFailure() в случае с заведомо битым запросом (например, заведомо битой ссылкой) выполняется! Проверял многократно. Подозреваю, что проблема в данных с сервера - сервер возвращает не чистый json, а json внутри тегов , . Может ли быть проблема в этом?
Интерфейс:
import retrofit2.Call
import retrofit2.http.GET
interface OrgList {
@GET("test.php/")
fun getcompanyes(): Call<List<Company?>?>
}
Код клиента:
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
var retrofit = Retrofit.Builder()
//Адрес источника публиковать не могу, поэтому заменил
.baseUrl("https://domain.ru/text/")
.addConverterFactory(GsonConverterFactory.create())
.build()
var companyes = retrofit.create(OrgList::class.java)
}
Собственно, сам запрос:
val headtext: TextView = findViewById(R.id.textView)
try {
val orgs: Call<List<Company?>?>? =
RetrofitClient.companyes.getcompanyes()
orgs?.enqueue(object : Callback<List<Company?>?> {
override fun onFailure(call: Call<List<Company?>?>, t: Throwable) {
//Без проблем выполняется, если ссылка baseUrl битая (например, http вместо https)
Toast.makeText(applicationContext, "Failed callback! ${t.message}", Toast.LENGTH_LONG).show()
}
override fun onResponse(
@NonNull call: Call<List<Company?>?>,
@NonNull response: Response<List<Company?>?>
) {
/*Ничего из этого не выполняется, ошибка не выводится, onFailure тоже не выполняется - просто ничего не происходит*/
headtext.text = response.body()?.toString()
Toast.makeText(applicationContext, response.body()?.toString(), Toast.LENGTH_LONG).show()
}
} )
} catch (e: Exception) {
headtext.text = "Exc: $e"
}