From fc171b3c865207bf30e7d0af6b7fdcdb65189e4f Mon Sep 17 00:00:00 2001 From: Vyacheslav Tretyakov Date: Tue, 5 Apr 2022 09:59:40 +0500 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A2=D1=80=D0=B5=D1=82=D1=8C=D1=8F=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=92.=D0=9D.=20NetworkHomework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HomeWorkNetwork/app/build.gradle | 19 +++++- .../com/pg/homeworknetwork/MainActivity.kt | 1 + .../java/com/pg/homeworknetwork/Models.kt | 5 -- .../pg/homeworknetwork/MovieDetailFragment.kt | 55 ---------------- .../java/com/pg/homeworknetwork/Network.kt | 5 -- .../{ => adapter}/MovieItemAdapter.kt | 5 +- .../fragment/MovieDetailFragment.kt | 65 +++++++++++++++++++ .../{ => fragment}/MovieListFragment.kt | 19 ++++-- .../com/pg/homeworknetwork/model/Movie.kt | 21 ++++++ .../homeworknetwork/model/MoviesResponse.kt | 17 +++++ .../pg/homeworknetwork/network/KtorClient.kt | 48 ++++++++++++++ .../com/pg/homeworknetwork/repo/TmdbRepo.kt | 31 +++++++++ .../app/src/main/res/layout/activity_main.xml | 2 +- 13 files changed, 220 insertions(+), 73 deletions(-) delete mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt delete mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieDetailFragment.kt delete mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt rename HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/{ => adapter}/MovieItemAdapter.kt (94%) create mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt rename HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/{ => fragment}/MovieListFragment.kt (73%) create mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/Movie.kt create mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/MoviesResponse.kt create mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/network/KtorClient.kt create mode 100644 HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/repo/TmdbRepo.kt diff --git a/HomeWorkNetwork/app/build.gradle b/HomeWorkNetwork/app/build.gradle index d5e6ad0..6f55510 100644 --- a/HomeWorkNetwork/app/build.gradle +++ b/HomeWorkNetwork/app/build.gradle @@ -7,10 +7,14 @@ plugins { android { compileSdk 31 + Properties localProperties = new Properties() + localProperties.load(project.rootProject.file('local.properties').newDataInputStream()) + defaultConfig { - buildConfigField "String", "API_BASE_URL", '"api.themoviedb.org"' - buildConfigField "String", "API_KEY", '"/*ваш ap_key*/"' + buildConfigField "String", "API_BASE_URL", '"api.themoviedb.org/3"' + /* API_KEY защищен в local.properties */ + buildConfigField "String", "API_KEY", "\"${localProperties.getProperty('TMDB_API_KEY')}\"" buildConfigField "String", "API_IMAGE_BASE_URL", '"https://image.tmdb.org/t/p/w500"' applicationId "com.pg.homeworknetwork" @@ -46,4 +50,15 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + + //ktor + def ktor_version = "1.6.8" + implementation "io.ktor:ktor-client-core:$ktor_version" + implementation "io.ktor:ktor-client-android:$ktor_version" + implementation "io.ktor:ktor-client-serialization:$ktor_version" + implementation "io.ktor:ktor-client-logging:$ktor_version" + implementation "ch.qos.logback:logback-classic:1.2.3" + + //serialization + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0" } \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MainActivity.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MainActivity.kt index cc0b79b..6976b6b 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MainActivity.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MainActivity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt deleted file mode 100644 index 69df05a..0000000 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.pg.homeworknetwork - -class Movies - -class Movie \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieDetailFragment.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieDetailFragment.kt deleted file mode 100644 index 338ddc7..0000000 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieDetailFragment.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.pg.homeworknetwork - -import android.os.Bundle -import android.view.View -import android.widget.ImageView -import android.widget.TextView -import androidx.activity.OnBackPressedCallback -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentTransaction -import coil.load -import coil.transform.RoundedCornersTransformation - -class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { - lateinit var poster: ImageView - lateinit var originalTitle: TextView - lateinit var overview: TextView - lateinit var popularity: TextView - lateinit var releaseDate: TextView - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - with(view) { - poster = findViewById(R.id.poster) - originalTitle = findViewById(R.id.originalTitle) - overview = findViewById(R.id.overview) - popularity = findViewById(R.id.popularity) - releaseDate = findViewById(R.id.releaseDate) - } - - val movieId = arguments?.getInt(ARG_ID) ?: 550 - val movie = //получаем фильм - poster.load("${BuildConfig.API_IMAGE_BASE_URL}${movie.posterPath}") { - transformations(RoundedCornersTransformation(16f)) - } - originalTitle.text = movie.originalTitle - overview.text = movie.overview - popularity.text = movie.popularity.toString() - releaseDate.text = movie.releaseDate - - activity?.onBackPressedDispatcher?.addCallback(this.viewLifecycleOwner, object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - val manager: FragmentManager = parentFragmentManager - val transaction: FragmentTransaction = manager.beginTransaction() - transaction.replace(R.id.mainFragment, MovieListFragment()) - transaction.commit() - } - }) - } - - companion object { - const val TAG = "MovieDetailFragment" - const val ARG_ID = "MovieDetailFragment_Arguments_Movie_Id" - } -} \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt deleted file mode 100644 index af25f9f..0000000 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.pg.homeworknetwork - -class Api { - -} \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieItemAdapter.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/adapter/MovieItemAdapter.kt similarity index 94% rename from HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieItemAdapter.kt rename to HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/adapter/MovieItemAdapter.kt index 64177a5..1f0fdc3 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieItemAdapter.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/adapter/MovieItemAdapter.kt @@ -1,4 +1,4 @@ -package com.pg.homeworknetwork +package com.pg.homeworknetwork.adapter import android.view.LayoutInflater import android.view.View @@ -12,6 +12,9 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import coil.load import coil.transform.RoundedCornersTransformation +import com.pg.homeworknetwork.BuildConfig +import com.pg.homeworknetwork.R +import com.pg.homeworknetwork.model.Movie internal class MovieItemAdapter : ListAdapter(MOVIE_COMPARATOR) { private var clickListener: IOnItemClick? = null diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt new file mode 100644 index 0000000..0609ea6 --- /dev/null +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt @@ -0,0 +1,65 @@ +package com.pg.homeworknetwork.fragment + +import android.os.Bundle +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.activity.OnBackPressedCallback +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentTransaction +import coil.load +import coil.transform.RoundedCornersTransformation +import com.pg.homeworknetwork.BuildConfig +import com.pg.homeworknetwork.R +import com.pg.homeworknetwork.repo.TmdbRepo +import kotlinx.coroutines.runBlocking + +class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { + lateinit var poster: ImageView + private lateinit var originalTitle: TextView + lateinit var overview: TextView + private lateinit var popularity: TextView + private lateinit var releaseDate: TextView + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + with(view) { + poster = findViewById(R.id.poster) + originalTitle = findViewById(R.id.originalTitle) + overview = findViewById(R.id.overview) + popularity = findViewById(R.id.popularity) + releaseDate = findViewById(R.id.releaseDate) + } + + val movieId = arguments?.getInt(ARG_ID) ?: 550 + + runBlocking { + TmdbRepo.getMovie(movieId) + }?.let { + poster.load("${BuildConfig.API_IMAGE_BASE_URL}${it.posterPath}") { + transformations(RoundedCornersTransformation(16f)) + } + originalTitle.text = it.originalTitle + overview.text = it.overview + popularity.text = it.popularity.toString() + releaseDate.text = it.releaseDate + } + + activity?.onBackPressedDispatcher?.addCallback( + this.viewLifecycleOwner, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + val manager: FragmentManager = parentFragmentManager + val transaction: FragmentTransaction = manager.beginTransaction() + transaction.replace(R.id.mainFragment, MovieListFragment()) + transaction.commit() + } + }) + } + + companion object { + const val TAG = "MovieDetailFragment" + const val ARG_ID = "MovieDetailFragment_Arguments_Movie_Id" + } +} \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt similarity index 73% rename from HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt rename to HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt index 762a176..7a7419d 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt @@ -1,4 +1,4 @@ -package com.pg.homeworknetwork +package com.pg.homeworknetwork.fragment import android.os.Bundle import android.view.View @@ -7,6 +7,11 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.pg.homeworknetwork.R +import com.pg.homeworknetwork.adapter.MovieItemAdapter +import com.pg.homeworknetwork.model.Movie +import com.pg.homeworknetwork.repo.TmdbRepo +import kotlinx.coroutines.runBlocking class MovieListFragment : Fragment(R.layout.fragment_movie_list) { lateinit var recycler: RecyclerView @@ -16,7 +21,8 @@ class MovieListFragment : Fragment(R.layout.fragment_movie_list) { val manager: FragmentManager = parentFragmentManager val transaction: FragmentTransaction = manager.beginTransaction() val detailsFragment = MovieDetailFragment() - detailsFragment.arguments = Bundle().apply { putInt(MovieDetailFragment.ARG_ID, movie.id) } + detailsFragment.arguments = + Bundle().apply { putInt(MovieDetailFragment.ARG_ID, movie.id) } transaction.replace(R.id.mainFragment, detailsFragment) transaction.commit() } @@ -31,8 +37,13 @@ class MovieListFragment : Fragment(R.layout.fragment_movie_list) { } } val adapter = (recycler.adapter as MovieItemAdapter) - val movies = //получаем фильмы - adapter.submitList(movies) + + runBlocking { + TmdbRepo.getMovies() + }?.let { + adapter.submitList(it.results) + } + super.onViewCreated(view, savedInstanceState) } diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/Movie.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/Movie.kt new file mode 100644 index 0000000..3196556 --- /dev/null +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/Movie.kt @@ -0,0 +1,21 @@ +package com.pg.homeworknetwork.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * Класс для описание фильма + */ +@Serializable +data class Movie( + val id: Int = 0, + val title: String = "", + @SerialName("original_title") + val originalTitle: String = "", + @SerialName("poster_path") + val posterPath: String? = null, + val overview: String? = null, + val popularity: Double = 0.0, + @SerialName("release_date") + val releaseDate: String = "" +) \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/MoviesResponse.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/MoviesResponse.kt new file mode 100644 index 0000000..34644b2 --- /dev/null +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/model/MoviesResponse.kt @@ -0,0 +1,17 @@ +package com.pg.homeworknetwork.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * Класс для формирования ответа с сервера (/movies/popular) + */ +@Serializable +data class MoviesResponse( + val page: Int = 0, + val results: List = emptyList(), + @SerialName("total_results") + val totalResults: Int = 0, + @SerialName("total_pages") + val totalPages: Int = 0 +) \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/network/KtorClient.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/network/KtorClient.kt new file mode 100644 index 0000000..5eb4745 --- /dev/null +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/network/KtorClient.kt @@ -0,0 +1,48 @@ +package com.pg.homeworknetwork.network + +import com.pg.homeworknetwork.BuildConfig +import io.ktor.client.* +import io.ktor.client.features.* +import io.ktor.client.features.json.* +import io.ktor.client.features.json.serializer.* +import io.ktor.client.features.logging.* +import io.ktor.client.request.* +import io.ktor.http.* +import kotlinx.serialization.json.Json + +/** + * Ktor клиент + */ +object KtorClient { + private val json = Json { + encodeDefaults = true + ignoreUnknownKeys = true + } + + val httpClient = HttpClient { + install(JsonFeature) { + serializer = KotlinxSerializer(json) + } + + install(Logging) { + logger = object : Logger { + override fun log(message: String) { + if (message.contains("api_key")) + println(message.replaceAfter("api_key=", "api_key")) + else println(message) + } + } + level = LogLevel.ALL + } + + defaultRequest { + host = BuildConfig.API_BASE_URL + url { + protocol = URLProtocol.HTTPS + } + parameter("api_key", BuildConfig.API_KEY) + contentType(ContentType.Application.Json) + accept(ContentType.Application.Json) + } + } +} \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/repo/TmdbRepo.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/repo/TmdbRepo.kt new file mode 100644 index 0000000..31475d2 --- /dev/null +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/repo/TmdbRepo.kt @@ -0,0 +1,31 @@ +package com.pg.homeworknetwork.repo + +import com.pg.homeworknetwork.model.Movie +import com.pg.homeworknetwork.model.MoviesResponse +import com.pg.homeworknetwork.network.KtorClient.httpClient +import io.ktor.client.features.* +import io.ktor.client.request.* + +/** + * Repo для запросов + */ +object TmdbRepo { + + /** Получает список фильмов [MoviesResponse] */ + suspend fun getMovies(): MoviesResponse? = + try { + httpClient.get(path = "movie/popular") + } catch (e: ResponseException) { + println(e.response.status.description) + null + } + + /** Получает фильм [Movie] по идентификатору [id] */ + suspend fun getMovie(id: Int): Movie? = + try { + httpClient.get(path = "/movie/$id") + } catch (e: ResponseException) { + println(e.response.status.description) + null + } +} \ No newline at end of file diff --git a/HomeWorkNetwork/app/src/main/res/layout/activity_main.xml b/HomeWorkNetwork/app/src/main/res/layout/activity_main.xml index 43acfbb..b670a0b 100644 --- a/HomeWorkNetwork/app/src/main/res/layout/activity_main.xml +++ b/HomeWorkNetwork/app/src/main/res/layout/activity_main.xml @@ -8,7 +8,7 @@ From 6767e37ade4a0af008ef75948a74890976c5d229 Mon Sep 17 00:00:00 2001 From: Vyacheslav Tretyakov Date: Tue, 5 Apr 2022 10:46:26 +0500 Subject: [PATCH 2/2] =?UTF-8?q?=D0=A2=D1=80=D0=B5=D1=82=D1=8C=D1=8F=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=92.=D0=9D.=20NetworkHomework=20-=20upd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fragment/MovieDetailFragment.kt | 23 +++++++++++-------- .../fragment/MovieListFragment.kt | 12 ++++++---- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt index 0609ea6..885d541 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieDetailFragment.kt @@ -12,8 +12,9 @@ import coil.load import coil.transform.RoundedCornersTransformation import com.pg.homeworknetwork.BuildConfig import com.pg.homeworknetwork.R +import com.pg.homeworknetwork.model.Movie import com.pg.homeworknetwork.repo.TmdbRepo -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.* class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { lateinit var poster: ImageView @@ -22,6 +23,8 @@ class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { private lateinit var popularity: TextView private lateinit var releaseDate: TextView + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) with(view) { @@ -34,16 +37,16 @@ class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { val movieId = arguments?.getInt(ARG_ID) ?: 550 - runBlocking { - TmdbRepo.getMovie(movieId) - }?.let { - poster.load("${BuildConfig.API_IMAGE_BASE_URL}${it.posterPath}") { - transformations(RoundedCornersTransformation(16f)) + scope.launch { + TmdbRepo.getMovie(movieId)?.let { + poster.load("${BuildConfig.API_IMAGE_BASE_URL}${it.posterPath}") { + transformations(RoundedCornersTransformation(16f)) + } + originalTitle.text = it.originalTitle + overview.text = it.overview + popularity.text = it.popularity.toString() + releaseDate.text = it.releaseDate } - originalTitle.text = it.originalTitle - overview.text = it.overview - popularity.text = it.popularity.toString() - releaseDate.text = it.releaseDate } activity?.onBackPressedDispatcher?.addCallback( diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt index 7a7419d..c722e6b 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/fragment/MovieListFragment.kt @@ -11,11 +11,13 @@ import com.pg.homeworknetwork.R import com.pg.homeworknetwork.adapter.MovieItemAdapter import com.pg.homeworknetwork.model.Movie import com.pg.homeworknetwork.repo.TmdbRepo -import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.* class MovieListFragment : Fragment(R.layout.fragment_movie_list) { lateinit var recycler: RecyclerView + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + private val goToDetails = object : MovieItemAdapter.IOnItemClick { override fun onItemClick(movie: Movie) { val manager: FragmentManager = parentFragmentManager @@ -38,10 +40,10 @@ class MovieListFragment : Fragment(R.layout.fragment_movie_list) { } val adapter = (recycler.adapter as MovieItemAdapter) - runBlocking { - TmdbRepo.getMovies() - }?.let { - adapter.submitList(it.results) + scope.launch { + TmdbRepo.getMovies()?.let { + adapter.submitList(it.results) + } } super.onViewCreated(view, savedInstanceState)