Retrofit 2 возвращает Null

Рейтинг: 0Ответов: 0Опубликовано: 18.02.2023

Первый раз использую 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())
            }
        }
    }
}

Ответы

Ответов пока нет.