java android firebase listview firebase-realtime-database

java - Firebase Android ListView no se muestra



firebase-realtime-database (1)

El problema en su código radica en el hecho de que tiene en su clase CustomListAdapter un campo llamado ItemName pero está usando un getter llamado getItemName() , que no es correcto ya que Firebase está buscando en la base de datos un campo llamado itemName y no ItemName . ¿Ver la letra i minúscula contra la letra mayúscula I ?

Hay dos formas en que puedes resolver este problema. El primero sería cambiar su clase de modelo cambiando el nombre de los campos de acuerdo con las Convenciones de denominación de Java . Así que la clase de modelo debería verse así:

public class CustomListAdapter { private String itemName, quantity, serialNo, supplierName, supplierEmail, supplierPhone; public CustomListAdapter() {} public CustomListAdapter(String itemName, String quantity, String serialNo, String supplierName, String supplierEmail, String supplierPhone) { this.itemName = itemName; this.quantity = quantity; this.serialNo = serialNo; this.supplierName = supplierName; this.supplierEmail = supplierEmail; this.supplierPhone = supplierPhone; } public String getItemName() { return itemName; } public String getQuantity() { return quantity; } public String getSerialNo() { return serialNo; } public String getSupplierName() { return supplierName; } public String getSupplierEmail() { return supplierEmail; } public String getSupplierPhone() { return supplierPhone; } }

Ver en este ejemplo, hay campos private y captadores públicos. También hay una solución más simple, para establecer el valor directamente en campos públicos como este:

public class CustomListAdapter { public String itemName, quantity, serialNo, supplierName, supplierEmail, supplierPhone; }

Ahora solo elimine los datos actuales y agréguelos nuevamente usando los nombres correctos. Esta solución funcionará solo si está en la fase de prueba.

También está el segundo enfoque, que es utilizar annotations . Por lo tanto, si prefiere usar campos privados y captadores públicos, debe usar la anotación PropertyName solo delante del captador. Así que su clase CustomListAdapter debería verse así:

public class CustomListAdapter { private String ItemName; private String Quantity; private String SerialNo; private String SupplierName; private String SupplierEmail; private String SupplierPhone; public CustomListAdapter() {} public CustomListAdapter(String itemName, String quantity, String serialNo, String supplierName, String supplierEmail, String supplierPhone) { ItemName = itemName; Quantity = quantity; SerialNo = serialNo; SupplierName = supplierName; SupplierEmail = supplierEmail; SupplierPhone = supplierPhone; } @PropertyName("ItemName") public String getItemName() { return ItemName; } @PropertyName("Quantity") public String getQuantity() { return Quantity; } @PropertyName("SerialNo") public String getSerialNo() { return SerialNo; } @PropertyName("SupplierName") public String getSupplierName() { return SupplierName; } @PropertyName("SupplierEmail") public String getSupplierEmail() { return SupplierEmail; } @PropertyName("SupplierPhone") public String getSupplierPhone() { return SupplierPhone; } }

Estoy intentando mostrar mis datos de la base de datos en tiempo real de firebase en una vista de lista en la pantalla del menú principal una vez que los usuarios inician sesión. La aplicación se está ejecutando pero no muestra los datos.

Estos son los datos en mi base de datos.

Ahora para los códigos.

MainMenu.java Esta función se llama en el OnCreate ().

public void makeItem () { lv = findViewById(R.id.listView); db = FirebaseDatabase.getInstance().getReference(); helper = new FirebaseHelper(db); adapter= new AdapterItem(this,helper.retrive()); lv.setAdapter(adapter); }

CustomListAdapter.java

public class CustomListAdapter{ private String ItemName; private String Quantity; private String SerialNo; private String SupplierName; private String SupplierEmail; private String SupplierPhone; public CustomListAdapter(){ } public CustomListAdapter (String ItemName,String Quantity,String SerialNo,String SupplierName,String SupplierEmail,String SupplierPhone) { this.ItemName = ItemName; this.Quantity = Quantity; this.SerialNo = SerialNo; this.SupplierName = SupplierName; this.SupplierEmail = SupplierEmail; this.SupplierPhone = SupplierPhone; } public void setItemName (String ItemName) { this.ItemName = ItemName; } public String getItemName () { return ItemName; } public void setQuantity (String Quantity) { this.Quantity = Quantity; } public String getQuantity () { return Quantity; } public void setSerialNo (String SerialNo) { this.SerialNo = SerialNo; } public String getSerialNo () { return SerialNo; } public void setSupplierName (String SupplierName) { this.SupplierName = SupplierName; } public String getSupplierName() { return SupplierName; } public void setSupplierEmail (String SupplierEmail) { this.SupplierEmail = SupplierEmail; } public String getSupplierEmail() { return SupplierEmail; } public void setSupplierPhone (String SupplierPhone) { this.SupplierPhone = SupplierPhone; } public String getSupplierPhone() { return SupplierPhone; } }

AdapterItem.java

public class AdapterItem extends BaseAdapter { Context c; ArrayList<CustomListAdapter> customListAdapters; public AdapterItem(Context c, ArrayList<CustomListAdapter> customListAdapters) { this.c = c; this.customListAdapters = customListAdapters; } @Override public int getCount() { return customListAdapters.size(); } @Override public Object getItem(int position) { return customListAdapters.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null) { convertView=LayoutInflater.from(c).inflate(R.layout.content_main_menu_list,parent,false); } TextView ItemName = convertView.findViewById(R.id.name); TextView SerialNo = convertView.findViewById(R.id.serialNo); TextView SupplierName = convertView.findViewById(R.id.supplierName); TextView amount = convertView.findViewById(R.id.amount); final CustomListAdapter CLA = (CustomListAdapter) this.getItem(position); ItemName.setText(CLA.getItemName()); SerialNo.setText(CLA.getSerialNo()); SupplierName.setText(CLA.getSupplierName()); amount.setText(CLA.getQuantity()); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(c,CLA.getItemName(),Toast.LENGTH_SHORT).show(); } }); return convertView; } }

content_main_menu.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/app_bar_main_menu"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="0dp" android:layout_marginTop="0dp" />

content_main_menu_list.xml es un diseño personalizado que he creado para que se muestre cada conjunto de datos.

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" xmlns:app="http://schemas.android.com/apk/res-auto"> <android.support.constraint.ConstraintLayout android:layout_width="0dp" android:layout_height="100dp" android:layout_marginStart="8dp" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <TextView android:id="@+id/amount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:text="TextView" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <TextView android:id="@+id/serialNo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:text="TextView" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/supplierName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:text="TextView" app:layout_constraintTop_toBottomOf="@+id/serialNo" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="23dp" android:layout_marginBottom="8dp" android:text="Medium Text" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#0171B0" app:layout_constraintBottom_toTopOf="@+id/serialNo" /> </android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>