当我从 API 发送数据然后使用
Room Database
将数据存储回应用程序时,我遇到了一个小问题。为什么我这样做是因为我正在开发一个类似电子商务的应用程序,可以将产品存储在购物车中。我使用 Room Database
从我在我的项目中使用 Volley Library
检索的 API 实现了购物车。但是,当购物车数据试图从 API 检索数据时,我实际上遇到了一个问题,我将数据保存在companion object
中,但是当它到达Cart Activity
时,只有image 数据匹配,而产品 name 和 price 没有出现,只显示我在 XML 布局中提供的默认文本。
在这里我附加了
ModelProduct
类,它是购物车功能的模型类
@Entity (tableName = "cart")
class ModelProduct(@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "idTbl")
var idTbl: Int,
var id: Int,
var name: String,
var price: Int,
var merk: String,
var stock: Int,
var catProduct: String,
var image: String,
var description: String,
var quantity: Int,
var created_at: String,
var updated_at: String,
var selected: Boolean = true)
来自模型类,我将所有数据存储在
GlobalData
类中
class GlobalData {
companion object{
var ids: Int = 0
var nameProduct: String = String()
var priceProduct: Int = 0
var merkProduct: String = String()
var stockProduct: Int = 0
var imageProduct: String = String()
var descProduct: String = String()
}
}
然后global类的数据居然已经成功入库了,当所有的信息都出现在
DetailProductActivity
类的时候我才看到这个
class DetailProductActivity : AppCompatActivity() {
lateinit var cartDB: CartDB
lateinit var cartItem: ModelProduct
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail_product)
cartDB = CartDB.getInstance(this)!!
detailProduct()
...
}
@SuppressLint("SetTextI18n")
private fun detailProduct() {
val data = intent.getStringExtra("extra")
cartItem = Gson().fromJson(data, ModelProduct::class.java)
Glide.with(this@DetailProductActivity).load(cartItem.image).into(img_product_detail)
price_product_detail.text = "Rp. ${cartItem.price}"
name_product_detail.text = cartItem.name
merk_product.text = "Merk : "+GlobalData.merkProduct
stock_product.text = "Stok Tersedia : "+GlobalData.stockProduct.toString()
desc_product.text = GlobalData.descProduct
}
private fun updateData(data: ModelProduct) {
CompositeDisposable().add(io.reactivex.Observable.fromCallable { cartDB.daoCart().update(data) }
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
Log.d("respons","data inserted")
Toast.makeText(this, "Berhasil menambahkan ke keranjang",Toast.LENGTH_SHORT).show()
})
}
private fun insertData() {
CompositeDisposable().add(io.reactivex.Observable.fromCallable { cartDB.daoCart().insert(cartItem) }
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
Log.d("respons","data inserted")
Toast.makeText(this, "Berhasil menambahkan ke keranjang",Toast.LENGTH_SHORT).show()
})
}
}
但是当我将数据添加到购物车表时,名称和价格产品文本没有出现,图像出现并与数据匹配,而价格可以在添加到购买金额时计算出来。
private fun showProduct() {
list = cartDB.daoCart().getAll() as kotlin.collections.ArrayList
val layoutManager = LinearLayoutManager(this)
layoutManager.orientation = LinearLayoutManager.VERTICAL
adapter = CartAdapter(this, list, object : CartAdapter.Listeners{
override fun onUpdate() {
countTotal()
}
override fun onDelete(position: Int) {
list.removeAt(position)
adapter.notifyDataSetChanged()
countTotal()
}
})
rv_cart.adapter = adapter
rv_cart.layoutManager = layoutManager
}
showProduct()
功能包含在CartActivity
中。但是我仍然怀疑我在这个Adapter类中存储从DetailProductActivity
到CartActivity
的数据
class CartAdapter(var context: Context, var data: ArrayList<ModelProduct>, var listener: Listeners) : RecyclerView.Adapter<CartAdapter.ViewHolder>() {
interface Listeners {
fun onUpdate()
fun onDelete(position: Int)
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var name = view.name_product_checkout.text
var price = view.price_product_checkout.text
var image = view.img_product_checkout
var cardview = view.findViewById<CardView>(R.id.cv_item)
var btnadd = view.findViewById<ImageButton>(R.id.btn_add_count)
var btnmin = view.findViewById<ImageButton>(R.id.btn_min_count)
var txcounts = view.findViewById<TextView>(R.id.tx_count)
var btndelete = view.findViewById<TextView>(R.id.remove_cart)
var checkbox = view.findViewById<CheckBox>(R.id.checkbox_cart)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CartAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.cart_item, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: CartAdapter.ViewHolder, position: Int) {
val cart = data[position]
val prices = Integer.valueOf(cart.price)
holder.name = cart.name
GlobalData.nameProduct = cart.name
holder.price = ((prices * cart.quantity).toString())
GlobalData.priceProduct = cart.price
var quantities = cart.quantity
holder.txcounts.text = quantities.toString()
holder.checkbox.isChecked = cart.selected
holder.checkbox.setOnCheckedChangeListener { button, isChecked ->
cart.selected = isChecked
updateCarts(cart)
}
holder.btndelete.setOnClickListener {
deleteCarts(cart)
listener.onDelete(position)
}
val image = cart.image
Glide.with(context).load(image).placeholder(R.drawable.ic_fastfood).into(holder.image)
holder.btnadd.setOnClickListener {
quantities++
cart.quantity = quantities
updateCarts(cart)
holder.txcounts.text = quantities.toString()
GlobalData.priceProduct = (prices * quantities)
}
...
}
}
谁能给我提示?我试图直接为每个变量声明一个伴随对象,但它没有用