I have the following error in android studio, And the problem is when adding products because if there is no product, it opens the shopping bag, but when adding one and wanting to re-enter it, it closes and when you want to enter the shopping bag purchases the application closes.
I would really like to receive help from you since I am not very expert in this application and I have very little time to deliver it, I will attach images and a video of the error with the application executed
ShoppingBagAdapter
class ShoppingBagAdapter(val context: Activity, val products: ArrayList): RecyclerView.Adapter<ShoppingBagAdapter.ShoppingBagViewHolder>() {
val sharedPref = SharedPref(context)
val TAG = "ShoppingBag"
init {
(context as ClientShoppingBagActivity).setTotal(getTotal())
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ShoppingBagViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.cardview_shopping_bag, parent, false)
return ShoppingBagViewHolder(view)
}
override fun getItemCount(): Int {
return products.size
}
override fun onBindViewHolder(holder: ShoppingBagViewHolder, position: Int) {
val product = products[position] // CADA UNA DE LAS CATEGORIAS
holder.textViewName.text = product.name
holder.textViewCounter.text = "${product.quantity}"
holder.textViewPrice.text = "${product.price * product.quantity!!}"
Glide.with(context).load(product.image1).into(holder.imageViewProduct)
holder.imageViewAdd.setOnClickListener { addItem(product, holder) }
holder.imageViewRemove.setOnClickListener { removeItem(product, holder) }
holder.imageViewDelete.setOnClickListener { deleteItem(position) }
// holder.itemView.setOnClickListener { goToDetail(product) } }
private fun getTotal(): Double {
var total = 0.0
for (p in products) {
total = total + (p.quantity!! * p.price)
}
return total
}
private fun getIndexOf(idProduct: String): Int {
var pos = 0
for (p in products) {
if (p.id == idProduct) {
return pos
}
pos++
}
return -1
}
private fun deleteItem(position: Int) {
products.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeRemoved(position, products.size)
sharedPref.save("order", products)
(context as ClientShoppingBagActivity).setTotal(getTotal())
}
private fun addItem(product: Product, holder: ShoppingBagViewHolder) {
val index = getIndexOf(product.id!!)
product.quantity = product.quantity!! + 1
products[index].quantity = product.quantity
holder.textViewCounter.text = "${product.quantity}"
holder.textViewPrice.text = "${product.quantity!! * product.price}$"
sharedPref.save("order", products)
(context as ClientShoppingBagActivity).setTotal(getTotal())
}
private fun removeItem(product: Product, holder: ShoppingBagViewHolder) {
if (product.quantity!! > 1) {
val index = getIndexOf(product.id!!)
product.quantity = product.quantity!! - 1
products[index].quantity = product.quantity
holder.textViewCounter.text = "${product.quantity}"
holder.textViewPrice.text = "${product.quantity!! * product.price}$"
sharedPref.save("order", products)
(context as ClientShoppingBagActivity).setTotal(getTotal())
}
}
private fun goToDetail(product: Product) {
val i = Intent(context, ClientProductsDetailActivity::class.java)
i.putExtra("product", product.toJson())
context.startActivity(i)
}
class ShoppingBagViewHolder(view: View): RecyclerView.ViewHolder(view) {
val textViewName: TextView
val textViewPrice: TextView
val textViewCounter: TextView
val imageViewProduct: ImageView
val imageViewAdd: ImageView
val imageViewRemove: ImageView
val imageViewDelete: ImageView
init {
textViewName = view.findViewById(R.id.textview_name)
textViewPrice = view.findViewById(R.id.textview_price)
textViewCounter = view.findViewById(R.id.textview_counter)
imageViewProduct = view.findViewById(R.id.imageview_product)
imageViewAdd = view.findViewById(R.id.imageview_add)
imageViewRemove = view.findViewById(R.id.imageview_remove)
imageViewDelete = view.findViewById(R.id.imageview_delete)
}
}
ClientShoppingBagActivity
class ClientShoppingBagActivity : AppCompatActivity() {
var recyclerViewShoppingBag: RecyclerView? = null
var textViewTotal: TextView? = null
var buttomNext: Button? = null
var toolbar: Toolbar? = null
var adapter: ShoppingBagAdapter? = null
var sharedPref: SharedPref? = null
var gson = Gson()
var selectedProducts = ArrayList<Product>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_client_shopping_bag)
sharedPref = SharedPref(this)
recyclerViewShoppingBag = findViewById(R.id.recyclerview_shopping_bag)
textViewTotal = findViewById(R.id.textview_total)
buttomNext = findViewById(R.id.btn_next)
toolbar = findViewById(R.id.toolbar)
toolbar?.setTitleTextColor(ContextCompat.getColor(this, R.color.white))
toolbar?.title = "Tu orden"
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
recyclerViewShoppingBag?.layoutManager = LinearLayoutManager(this)
getProductsFromSharedPref()
buttomNext?.setOnClickListener{goToAddressList() }
}
private fun goToAddressList(){
val i = Intent(this, ClientAddressListActivity::class.java)
startActivity(i)
}
fun setTotal(total: Double){
textViewTotal?.text = "${total}$"
}
private fun getProductsFromSharedPref() {
if (!sharedPref?.getData("order").isNullOrBlank()) { // EXISTE UNA ORDEN EN SHARED PREF
val type = object : TypeToken<ArrayList<Product>>() {}.type
selectedProducts = gson.fromJson(sharedPref?.getData("order"), type)
adapter = ShoppingBagAdapter(this, selectedProducts)
recyclerViewShoppingBag?.adapter = adapter
}
}
link of the video where the application is running so you can see where the error is https://youtu.be/iUNCo5aCLLY
here is a more explicit video about the problem in question, I really hope you can help me https://youtu.be/T262TUQxRVw
and now I will proceed to attach the images so that you can see the full description of the error, although I can see them below as well
image 1 where is the complete error
in this image I specify the error line
in this image I specify the other line of the error
in this image I specify the other line of the error
in this image I specify the other line of the error
full error description
2022-05-16 16:28:46.508 6163-6163/com.blader.domicilios E/AndroidRuntime: FATAL EXCEPTION: main Process: com.blader.domicilios, PID: 6163 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.blader.domicilios/com.blader.domicilios.activities.client.shopping_bag.ClientShoppingBagActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.NullPointerException at com.blader.domicilios.adapters.ShoppingBagAdapter.getTotal(ShoppingBagAdapter.kt:57) at com.blader.domicilios.adapters.ShoppingBagAdapter.(ShoppingBagAdapter.kt:25) at com.blader.domicilios.activities.client.shopping_bag.ClientShoppingBagActivity.getProductsFromSharedPref(ClientShoppingBagActivity.kt:73) at com.blader.domicilios.activities.client.shopping_bag.ClientShoppingBagActivity.onCreate(ClientShoppingBagActivity.kt:52) at android.app.Activity.performCreate(Activity.java:8000) at android.app.Activity.performCreate(Activity.java:7984) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method)
I really hope you can help me as I am very worried about not being able to deliver my work on time, and I really have very little time.**