Retrofit 2 возвращает Null
Первый раз использую Retrofit, прочитал принцип работы, попробовал реализовать, но в итоге возвращается null. Искал на русскоязычных и на англоязычных сайтах, но ни один из способов мне не помог. Подскажите что тут не так.
Ресурс с которого нужно получить инфу: https://s3-eu-west-1.amazonaws.com/sequeniatesttask/films.json
Зависимости:
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
Дата классы:
import com.google.gson.annotations.SerializedName
data class NestedFilms( var data: List<Film>? )
data class Film(
@SerializedName("id") val id: Int,
@SerializedName("localized_name") val localized_name: String,
@SerializedName("name") val name: String,
@SerializedName("year") val year: Int,
@SerializedName("rating") val rating: Float,
@SerializedName("image_url") val image_url: String,
@SerializedName("description") val description: String,
@SerializedName("genres") val genres: List<String>
)
Интерфейс
import retrofit2.Response
import retrofit2.http.GET
interface FilmApi {
@GET("films.json")
suspend fun getNestedFilms(): Response<NestedFilms>
}
MainActivity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.LinearLayout
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.testkinoapp.retrofit.Film
import com.example.testkinoapp.retrofit.FilmApi
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class MainActivity : AppCompatActivity(), com.example.testkinoapp.Adapter.Listener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportActionBar?.title = "Фильмы"
CoroutineScope(Dispatchers.IO).launch {
val retrofit = Retrofit.Builder()
.baseUrl("https://s3-eu-west-1.amazonaws.com/sequeniatesttask/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val filmApi = retrofit.create(FilmApi::class.java)
val response = filmApi.getNestedFilms()
withContext(Dispatchers.Main) {
val items: List<Film>? = response.body()?.data
if(items != null){
for (i in 0 until items.count()){
println("Film #$i")
//ID
val id = items[i].id ?: 0
println("Id: $id")
//Localized_name
val Localize_name = items[i].localized_name ?: "N/A"
println("Licalize_name: $Localize_name")
//name
val name = items[i].name ?: "N/A"
println("Name: $name")
//Year
val year = items[i].year ?: 2000
println("Year: $year")
//Rating
val rating = items[i].rating ?: 0.0
println("Rating: $rating")
//Image_Url
val image_url = items[i].image_url ?: "N/A"
println("Image_Url: $image_url")
//Description
val description = items[i].description ?: "N/A"
println("Description: $description")
//Genres
val genres = items[i].genres ?: "N/A"
println("Genres: $genres")
}
} else{
Log.e("RETROFIT_EROR", response.toString())
}
}
}
}
Источник: Stack Overflow на русском