diff --git a/HomeWorkNetwork/app/build.gradle b/HomeWorkNetwork/app/build.gradle index d5e6ad0..5d12c04 100644 --- a/HomeWorkNetwork/app/build.gradle +++ b/HomeWorkNetwork/app/build.gradle @@ -9,8 +9,8 @@ android { defaultConfig { - buildConfigField "String", "API_BASE_URL", '"api.themoviedb.org"' - buildConfigField "String", "API_KEY", '"/*ваш ap_key*/"' + buildConfigField "String", "API_BASE_URL", '"https://api.themoviedb.org"' + buildConfigField "String", "API_KEY", '"5bd7b297e51fecacaccacc896675e473"' buildConfigField "String", "API_IMAGE_BASE_URL", '"https://image.tmdb.org/t/p/w500"' applicationId "com.pg.homeworknetwork" @@ -46,4 +46,11 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + implementation 'androidx.test.ext:junit-ktx:1.1.3' + + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0' + implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0' } \ 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 index 338ddc7..d855bdb 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieDetailFragment.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieDetailFragment.kt @@ -10,6 +10,7 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import coil.load import coil.transform.RoundedCornersTransformation +import kotlinx.coroutines.* class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { lateinit var poster: ImageView @@ -18,6 +19,8 @@ class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { lateinit var popularity: TextView lateinit var releaseDate: TextView + private val scope = CoroutineScope(Dispatchers.IO) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) with(view) { @@ -29,27 +32,40 @@ class MovieDetailFragment : Fragment(R.layout.fragment_movie_preview) { } 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() + + scope.launch(Dispatchers.IO) { + val movie = getMovies(movieId) + withContext(Dispatchers.Main) { + 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" } + + private suspend fun getMovies(id: Int): Movie { + val api = Api().getCoroutineApi() + return api.getMovie(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/MovieListFragment.kt index 762a176..d68e903 100644 --- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt +++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt @@ -7,16 +7,19 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import kotlinx.coroutines.* class MovieListFragment : Fragment(R.layout.fragment_movie_list) { lateinit var recycler: RecyclerView + private val scope = CoroutineScope(Dispatchers.IO) private val goToDetails = object : MovieItemAdapter.IOnItemClick { override fun onItemClick(movie: Movie) { 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,12 +34,23 @@ class MovieListFragment : Fragment(R.layout.fragment_movie_list) { } } val adapter = (recycler.adapter as MovieItemAdapter) - val movies = //получаем фильмы - adapter.submitList(movies) + scope.launch(Dispatchers.IO) { + val movies = getMovies() + withContext(Dispatchers.Main) { + adapter.submitList(movies) + } + } super.onViewCreated(view, savedInstanceState) } companion object { const val TAG = "MovieListFragment" } + + private suspend fun getMovies(): List { + val movies: List + val api = Api().getCoroutineApi() + movies = api.getMovies().results + return movies + } } \ No newline at end of file