Зависимости для build.gradle:
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
Product.kt
data class Product(
val id: Int,
val title: String,
val description: String,
val price: Int,
val discountPercentage: Float,
val rating: Float,
val stock: Int,
val brand: String,
val category: String,
val thumbnail: String,
val images: List<String>
)
ProductApi.kt
import retrofit2.http.GET
import retrofit2.http.Path
interface ProductApi {
@GET("products/{id}")
suspend fun getProductById(@Path("id") id: Int): Product
}
Разрешение в манифест:
<uses-permission android:name="android.permission.INTERNET"/>
activity_main.kt
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.157" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import com.example.retrofitlesson.retrofit.ProductApi
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val tv = findViewById<TextView>(R.id.tv)
val b = findViewById<Button>(R.id.button)
val retrofit = Retrofit.Builder()
.baseUrl("https://dummyjson.com")
.addConverterFactory(GsonConverterFactory.create()).build()
val productApi = retrofit.create(ProductApi::class.java)
b.setOnClickListener {
CoroutineScope(Dispatchers.IO).launch {
val product = productApi.getProductById(3)
runOnUiThread {
tv.text = product.title
}
}
}
}
}
Будь ты проклят !!! Ни один из твоих уроков не работает – приложения сбрасывает с ошибкой !!! Удали, сука все свои уроки и не трать время людей которые хотят учиться , ты паразит чёртов !!!
Мужик там ответ от сервера поменялся, просто измени дата класс под ответ и все
Здравствуйте! Сайт DummyJSON обновился и не понятно как вносить параметр “dimensions” и “reviews” в дата класс Product.
data class Dimensions(
val width:Float,
val height: Float,
val depth: Float
)
data class Meta(
val createdAt: String,
val updatedAt: String,
val barcode: String,
val qrCode: String
)
data class Reviews(
val rating: Int,
val comment: String,
val date: String,
val reviewerName: String,
val reviewerEmail: String
)
data class Product(
val id: Int,
val title: String,
val description: String,
val category: String,
val price: Float,
val discountPercentage: Float,
val rating: Float,
val stock: Int,
val tags: List,
val brand: String,
val sku: String,
val weight: Int,
val dimensions: Dimensions,
val warrantyInformation: String,
val shippingInformation: String,
val availabilityStatus: String,
val reviews: List,
val returnPolicy: String,
val minimumOrderQuantity: Int,
val meta: Meta,
val thumbnail: String,
val images: List
)
В классе Product в val images List String, val tags List String, val reviews Reviews не отобразилось нормально типы листов.
val reviews List Reviews 🤬🤬