Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

RecycleView not showing while running the application

i’m trying to fetch data from mysql database using volley and display it in recycleview but i’ve a problem the recycleview is not shwoing.
here is order_layout.xml :

<?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"
    android:id="@+id/cardHolder"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:background="@drawable/order_background"
    android:padding="8dp">

    <LinearLayout
        android:id="@+id/orderView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:background="@drawable/orderid_background"
        android:orientation="vertical"
        android:padding="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Order ID "
            android:textColor="@color/white" />

        <TextView
            android:id="@+id/orderID"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="6dp"
            android:text="1"
            android:textColor="@color/white"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linear1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="12dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/orderView"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Client Name:"
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/clientName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:text="test"
            android:textColor="@color/black"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linear2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="12dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/orderView"
        app:layout_constraintTop_toBottomOf="@+id/linear1">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Order Date:"
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/orderDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:text="test"
            android:textColor="@color/black"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linear3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="12dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/orderView"
        app:layout_constraintTop_toBottomOf="@+id/linear2">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Status:"
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/orderStatus"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:text="test"
            android:textColor="@color/black"
            android:textSize="20sp" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

activity_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">


        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/RecycleV"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:itemCount="2"
            tools:listitem="@layout/order_layout" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/addBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="true"
            android:layout_margin="16dp"
            android:backgroundTint="@color/cardview_dark_background"
            android:contentDescription="@string/adding_order"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:srcCompat="@drawable/baseline_add_24"
            app:tint="@color/white" />


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

MainActivity.kt

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

package com.example.demo

import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.android.volley.Request
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.example.demo.databinding.ActivityMainBinding
import org.json.JSONArray
import org.json.JSONException

class MainActivity : AppCompatActivity() {
    private val URL = "http://192.168.100.12/demo/Android/v1/getAll.php"
    lateinit var binding: ActivityMainBinding
    private lateinit var ordersList: ArrayList<Order>
    private lateinit var rcvAdapter: CustomAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        binding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        ordersList = ArrayList()
        rcvAdapter = CustomAdapter(ordersList)
        binding.RecycleV.layoutManager = LinearLayoutManager(this)
        binding.RecycleV.setHasFixedSize(true)
        binding.RecycleV.adapter = rcvAdapter
        loadData()
//        binding.rv.apply {
//            layoutManager = LinearLayoutManager(this@MainActivity)
//            adapter = rcvAdapter
//        }
//        binding.sr.setOnRefreshListener {
//            loadData()
//            binding.sr.isRefreshing = false
//        }
//        binding.addBtn.setOnClickListener {
//            val intent = Intent()
//        }
    }

    private fun loadData() {
        val queue = Volley.newRequestQueue(this)
        val stringRequest = StringRequest(Request.Method.POST, URL, { response ->
            try {
                Log.e("anytext", response)
                val jsonArray = JSONArray(response)
                for (i: Int in 0 until jsonArray.length()) {
                    val jsonObject = jsonArray.getJSONObject(i)
                    val order = Order(
                        jsonObject.getInt("ID"),
                        jsonObject.getString("orderDate"),
                        jsonObject.getString("status"),
                        jsonObject.getString("name")
                    )
                    ordersList.add(order)
                    Log.e("order data", order.toString())
                    Log.e("array size", ordersList.size.toString())

                }
            } catch (e: JSONException) {
                e.printStackTrace()
            }
            if (response.isEmpty()) {
                Toast.makeText(this, "There is no orders", Toast.LENGTH_SHORT).show()
            }

        }, { error ->
            Toast.makeText(
                this, error.message, Toast.LENGTH_LONG
            ).show()
        })
        queue.add(stringRequest)
        Log.e("final", "success")
    }
}

CustomAdapter.kt

package com.example.demo

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class CustomAdapter(
    private val ordersList: ArrayList<Order>
) : RecyclerView.Adapter<CustomAdapter.MyViewHolder>() {

    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val id: TextView = itemView.findViewById(R.id.orderID)
        val clientName: TextView = itemView.findViewById(R.id.clientName)
        val orderDate: TextView = itemView.findViewById(R.id.orderDate)
        val orderStatus: TextView = itemView.findViewById(R.id.orderStatus)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.order_layout, parent, false)
        return MyViewHolder(view)
    }

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

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val order = ordersList[position]
        holder.apply {
            id.text = order.id.toString()
            orderStatus.text = order.status
            orderDate.text = order.orderDate
            clientName.text = order.clientName
        }
    }
}

Order.kt

package com.example.demo

data class Order(val id: Int, val orderDate: String, val status: String, val clientName: String)

i tried to change in the layout of the activiy_main.xml and order_layout.xml but nothing worked and also tried to log to know if the data is fetched and i found out that they are retrieved

>Solution :

You are not updating the adapter anywhere.

After you add things to ordersList you need to let the adapter for the RecyclerView know.

e.g.:

fun update(val newOrdersList: List<Order>) {
    ordersList.clearAll()
    ordersList.addAll(newOrdersList)
    notifyDataSetChanged() // This is deprecated but works - demonstration only
}

The whole notifyDatasetChanged might send you down a new rabbit hole of optimizing the performance of the RecyclerView but to give you a simple answer to your problem I won’t go into it.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading