gpt4 book ai didi

java - 无法在 RecyclerView 中显示从 Firebase 检索到的数据

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:48 26 4
gpt4 key购买 nike

我相信我的 recyclerView 已成功从 Firebase 检索数据,因为它在我的回收器 View 中显示了 2 个 cardView,这与我的 Firebase 菜单下分配的数据数量相同。

Firebase Image

Screenshot of my RecyclerView

我有 3 个类,分别是 listOnline2、MyAdapter 和 cMenu。 lisOnline2 和 MyAdapter 内部都有一个数组。我使用 listOnline2 中的数组存储从 firebase 检索的数据,并使用 MyAdapter 中的数组来查看 cardview 内的数据。以下是我对 listOnline2 类的编码。

`DatabaseReference currentUserRef,counterRef, ref;
MyAdapter adapterR;

RecyclerView listOnline21;
ArrayList <cMenu> menu;
private static final String TAG = "listOnline2";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_list_online2 );

listOnline21= (RecyclerView) findViewById(R.id.listMenu);
listOnline21.setLayoutManager( new LinearLayoutManager( listOnline2.this ) );
listOnline21.setHasFixedSize(true);
menu= new ArrayList<cMenu>();


counterRef= FirebaseDatabase.getInstance().getReference().child( "Menu" ).child( "twRAlXRMSgPkA35nmMoFAuAsTdz1" );
Log.d( TAG, "Clicked ID: "+idd );
currentUserRef=FirebaseDatabase.getInstance().getReference("Menu").child( FirebaseAuth.getInstance().getCurrentUser().getUid() );

counterRef.addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){

cMenu p=dataSnapshot1.getValue(cMenu.class);
menu.add(p);

}
Log.d( TAG, "Data of array: "+menu );
adapterR=new MyAdapter( listOnline2.this, menu );
listOnline21.setAdapter( adapterR );
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(listOnline2.this, "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
}
} );

Toolbar toolbar=findViewById(R.id.toolbar);
toolbar.setTitle("Food Ordering Delivery System");
setSupportActionBar(toolbar);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater= getMenuInflater();
inflater.inflate( R.menu.main_menu,menu );
return true;
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.action_cart:
Intent toCart=new Intent( listOnline2.this, Cart.class );
startActivity( toCart );
break;

case R.id.action_logout:
Intent toLogin=new Intent( listOnline2.this, LoginActivity.class );
startActivity( toLogin );

break;
}
return super.onOptionsItemSelected( item );
}`

同时,下面是我在 MyAdapter 类中的代码

DatabaseReference currentUserRef,counterRef;
MyAdapter adapterR;

RecyclerView listOnline21;
ArrayList <cMenu> menu;
private static final String TAG = "listOnline2";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_list_online2 );

listOnline21= (RecyclerView) findViewById(R.id.listMenu);
listOnline21.setLayoutManager( new LinearLayoutManager( listOnline2.this ) );
listOnline21.setHasFixedSize(true);
menu= new ArrayList<cMenu>();


counterRef= FirebaseDatabase.getInstance().getReference().child( "Menu" ).child( "twRAlXRMSgPkA35nmMoFAuAsTdz1" );
Log.d( TAG, "Clicked ID: "+idd );
currentUserRef=FirebaseDatabase.getInstance().getReference("Menu").child( FirebaseAuth.getInstance().getCurrentUser().getUid() );

counterRef.addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){

cMenu p=dataSnapshot1.getValue(cMenu.class);
menu.add(p);

}
Log.d( TAG, "Data of array: "+menu );
adapterR=new MyAdapter( listOnline2.this, menu );
listOnline21.setAdapter( adapterR );
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(listOnline2.this, "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
}
} );

Toolbar toolbar=findViewById(R.id.toolbar);
toolbar.setTitle("Food Ordering Delivery System");
setSupportActionBar(toolbar);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater= getMenuInflater();
inflater.inflate( R.menu.main_menu,menu );
return true;
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.action_cart:
Intent toCart=new Intent( listOnline2.this, Cart.class );
startActivity( toCart );
break;

case R.id.action_logout:
Intent toLogin=new Intent( listOnline2.this, LoginActivity.class );
startActivity( toLogin );

break;
}
return super.onOptionsItemSelected( item );
}

最后一个类是cMenu,如下:

private String fName, fDesc, fImage, fQuantity, fPrice, fId;

public cMenu() {
}

public cMenu(String fName, String fDesc, String fImage, String fQuantity, String fPrice, String fId) {
this.fName = fName;
this.fDesc = fDesc;
this.fImage = fImage;
this.fQuantity = fQuantity;
this.fPrice = fPrice;
this.fId = fId;
}

public String getfName() {
return fName;
}

public void setfName(String fName) {
this.fName = fName;
}

public String getfDesc() {
return fDesc;
}

public void setfDesc(String fDesc) {
this.fDesc = fDesc;
}

public String getfImage() {
return fImage;
}

public void setfImage(String fImage) {
this.fImage = fImage;
}

public String getfQuantity() {
return fQuantity;
}

public void setfQuantity(String fQuantity) {
this.fQuantity = fQuantity;
}

public String getfPrice() {
return fPrice;
}

public void setfPrice(String fPrice) {
this.fPrice = fPrice;
}

public String getfId() {
return fId;
}

public void setfId(String fId) {
this.fId = fId;
}

如何显示我存储从 Firebase 检索的数据的数组中的数据?请给我一个建议,因为我花了两天时间研究这些代码。预先感谢您!

最佳答案

我解决了!我从 cMenu 类更改了 3 个变量。

fName to menuName

fDesc to foodDescription

fPrice to price

为了从 Firebase 查看数据,需要更改这些变量的原因是 setter getter 类中的变量需要与数据库中的变量名称相同。您可以在问题部分查看我的数据库截图。感谢您的努力!

关于java - 无法在 RecyclerView 中显示从 Firebase 检索到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59175090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com