Android Studio 如何将JSON数据(如图像)解析为新ActivityKotlin

qcuzuvrc  于 12个月前  发布在  Android
关注(0)|答案(2)|浏览(113)

我把https://dummyjson.com/products的json数据解析到了jscleview中。显示产品列表。然后我在item上设置onclcik侦听器,并将图像和描述,价格解析为新的Activity。价格和描述是解析成新的活动BT图像不显示
MyAdapter.kt

package com.fiham.retroapi

import android.app.Activity
import android.content.Intent

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import com.squareup.picasso.Picasso

class MyAdapter (val context: Activity , val productArrayList : List<Product>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder> (){


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {

       val itemview = LayoutInflater.from(context).inflate(R.layout.single_item, parent, false)
        return  MyViewHolder(itemview )

    }

    override fun getItemCount(): Int {
        return productArrayList.size
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {

        val currentItem = productArrayList[position]
        holder.title.text = currentItem.title
        holder.rating.text = currentItem.rating.toString()
        //imageview
        Picasso.get().load(currentItem.thumbnail).into(holder.image)

        holder.constraint_row.setOnClickListener {
            val cont = holder.constraint_row.context

            val intent = Intent(it.context, ProductDetails::class.java)

            intent.putExtra("image" , currentItem.thumbnail)
            intent.putExtra("price" , currentItem.price)
            intent.putExtra("description" , currentItem.description)

            it.context.startActivity(intent)

        }



    }

    class MyViewHolder (itemview : View) : RecyclerView.ViewHolder (itemview) {

        var title : TextView
        var rating : TextView
        var image : ImageView
        var constraint_row : ConstraintLayout = itemview.findViewById(R.id.constraint_row)

        init {
            title = itemview.findViewById(R.id.tv2)
            image = itemview.findViewById(R.id.iv1)
            rating = itemview.findViewById(R.id.rating)

        }


    }

}

Prodcut.kt

package com.fiham.retroapi

data class Product(
    val brand: String,
    val category: String,
    val description: String,
    val discountPercentage: Double,
    val id: Int,
    val images: List<String>,
    val price: Int,
    val rating: Double,
    val stock: Int,
    val thumbnail: String,
    val title: String
)

Productdetails.kt

package com.fiham.retroapi

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView
import android.widget.TextView

class ProductDetails : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_product_details)

        val thumbnail = findViewById<ImageView>(R.id.thumbnail)
        val instock = findViewById<TextView>(R.id.instock)
        val desc = findViewById<TextView>(R.id.desc)

        val intent = intent

        val image  = intent?.getIntExtra("image" , 0 )
        val price  = intent?.getIntExtra("price" ,0)
        val description  = intent?.getStringExtra("description" )

        if (image != null) {
            thumbnail.setImageResource(image).toString()
        }

        instock.text = price.toString()
        desc.text = description
    }
}

我想解析图像到新的活动来自我的适配器

iih3973s

iih3973s1#

当我们传递一个类型的数据时,我们必须接收这个相同类型的数据
问题是您从类型传递数据,并从另一个类型接收此数据

MyAdapter.kt

holder.constraint_row.setOnClickListener {
            val cont = holder.constraint_row.context

            val intent = Intent(it.context, ProductDetails::class.java)
            
            //currentItem.thumbnail is string in Prodcut.kt 
            intent.putExtra("image" , currentItem.thumbnail)
            intent.putExtra("price" , currentItem.price)
            intent.putExtra("description" , currentItem.description)

            it.context.startActivity(intent)

        }

产品详情.kt

class ProductDetails : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_product_details)

        val thumbnail = findViewById<ImageView>(R.id.thumbnail)
        val instock = findViewById<TextView>(R.id.instock)
        val desc = findViewById<TextView>(R.id.desc)

        val intent = intent
   
        //We receive data of the same type 
        val image  = intent?.getStringExtra("image")
        val price  = intent?.getIntExtra("price" ,0)
        val description  = intent?.getStringExtra("description" )

        if (image != null) {
            //The image is not in the drawble folder until we use this
           // thumbnail.setImageResource(image).toString()
           //We are receiving a link that we want to display this image 
           //from the api
          //imageview
          Picasso.get().load(image).into(thumbnail)

        }

        instock.text = price.toString()
        desc.text = description
    }
}
fkaflof6

fkaflof62#

你必须用这个

Glide.with(context).load(image).placeholder(R.drawable.no_image).into(thumbnail)

注意R.drawable.no_image是默认图片,当没有得到任何数据时,则显示此图片默认值

相关问题