diff --git a/HomeWorkNetwork/.idea/gradle.xml b/HomeWorkNetwork/.idea/gradle.xml
index 526b4c2..a2d7c21 100644
--- a/HomeWorkNetwork/.idea/gradle.xml
+++ b/HomeWorkNetwork/.idea/gradle.xml
@@ -13,7 +13,6 @@
-
diff --git a/HomeWorkNetwork/app/build.gradle b/HomeWorkNetwork/app/build.gradle
index d5e6ad0..4158702 100644
--- a/HomeWorkNetwork/app/build.gradle
+++ b/HomeWorkNetwork/app/build.gradle
@@ -10,7 +10,7 @@ android {
defaultConfig {
buildConfigField "String", "API_BASE_URL", '"api.themoviedb.org"'
- buildConfigField "String", "API_KEY", '"/*ваш ap_key*/"'
+ buildConfigField "String", "API_KEY", '"5312d0ab4e8530cb43126e5a47da49ca"'
buildConfigField "String", "API_IMAGE_BASE_URL", '"https://image.tmdb.org/t/p/w500"'
applicationId "com.pg.homeworknetwork"
@@ -46,4 +46,22 @@ 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 'com.squareup.retrofit2:retrofit:2.9.0'
+ implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'
+ implementation "com.squareup.okhttp3:okhttp:4.9.3"
+ implementation 'com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0'
+ implementation "io.reactivex.rxjava3:rxjava:3.1.4"
+ implementation "io.reactivex.rxjava3:rxandroid:3.0.0"
+ implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
+ implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1'
+
+ implementation "io.ktor:ktor-client-core:1.6.7"
+ implementation "io.ktor:ktor-client-android:1.6.7"
+ implementation 'io.ktor:ktor-client-serialization:1.6.7'
+ implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'
+ implementation 'io.ktor:ktor-client-logging-jvm:1.6.7'
+
+ implementation 'androidx.test.ext:junit-ktx:1.1.3'
+
}
\ No newline at end of file
diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt
index 69df05a..6292408 100644
--- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt
+++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Models.kt
@@ -1,5 +1,30 @@
package com.pg.homeworknetwork
-class Movies
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
-class Movie
\ No newline at end of file
+@Serializable
+data class Movies(
+ @SerialName("page")
+ val page: Int,
+ @SerialName("results")
+ val results: MutableList
+)
+
+@Serializable
+data class Movie(
+ @SerialName("id")
+ val id: Int,
+ @SerialName("title")
+ val title: String? = null,
+ @SerialName("poster_path")
+ val posterPath: String? = null,
+ @SerialName("overview")
+ val overview: String? = null,
+ @SerialName("release_date")
+ val releaseDate: String? = null,
+ @SerialName("original_title")
+ val originalTitle: String? = null,
+ @SerialName("popularity")
+ val popularity: Double? = null
+)
\ 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..d6c512b 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(SupervisorJob() + Dispatchers.IO)
+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(view) {
@@ -29,14 +32,19 @@ 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))
+ scope.launch {
+ //TODO получаем фильм
+ val movie = Api().getMovieById(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
+ }
}
- 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() {
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..59d5f25 100644
--- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt
+++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/MovieListFragment.kt
@@ -7,9 +7,14 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.launch
class MovieListFragment : Fragment(R.layout.fragment_movie_list) {
lateinit var recycler: RecyclerView
+ private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
private val goToDetails = object : MovieItemAdapter.IOnItemClick {
override fun onItemClick(movie: Movie) {
@@ -31,8 +36,10 @@ class MovieListFragment : Fragment(R.layout.fragment_movie_list) {
}
}
val adapter = (recycler.adapter as MovieItemAdapter)
- val movies = //получаем фильмы
- adapter.submitList(movies)
+ scope.launch {
+ val movies = Api().getTopMovies()
+ adapter.submitList(movies.results)
+ }
super.onViewCreated(view, savedInstanceState)
}
diff --git a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt
index af25f9f..94d1e00 100644
--- a/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt
+++ b/HomeWorkNetwork/app/src/main/java/com/pg/homeworknetwork/Network.kt
@@ -1,5 +1,37 @@
package com.pg.homeworknetwork
+import io.ktor.client.*
+import io.ktor.client.engine.android.*
+import io.ktor.client.features.json.*
+import io.ktor.client.features.json.serializer.*
+import io.ktor.client.request.*
+import kotlinx.serialization.json.Json as serialJson
+
class Api {
+ private val client = HttpClient(Android){
+ install(JsonFeature) {
+ serializer = KotlinxSerializer(serialJson {
+ prettyPrint = true
+ isLenient = true
+ ignoreUnknownKeys = true
+ })
+ }
+ }
+
+ suspend fun getTopMovies(): Movies {
+ return client.use {
+ it.get(host = BuildConfig.API_BASE_URL, path = "3/movie/top_rated") {
+ parameter("api_key", BuildConfig.API_KEY)
+ }
+ }
+ }
+
+ suspend fun getMovieById(id: Int): Movie {
+ return client.use {
+ it.get(host = BuildConfig.API_BASE_URL, path = "3/movie/" + id.toString()) {
+ parameter("api_key", BuildConfig.API_KEY)
+ }
+ }
+ }
}
\ No newline at end of file