![](/img/trans.png)
[英]Failed to show specific data from firebase in a RecyclerView
[英]Failed to show data retrieved from Firebase in RecyclerView
我相信我的 recyclerView 已成功從 firebase 檢索數據,因為它在我的 recycler 視圖中顯示了 2 cardView,這與菜單下我的 firebase 內分配的數據數量相同。
我有 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 檢索到的數據的數組中的數據? 請給我一個建議,因為我花了 2 天時間來研究這些代碼。 先感謝您!
我解決了! 我從 cMenu 類更改了 3 個變量。
fName 到 menuName
fDesc to foodDescription
f價格到價格
之所以需要更改這些變量以查看來自 firebase 的數據,是因為 setter getter 類中的變量需要與數據庫中的變量名稱相同。 您可以在問題部分查看我的數據庫屏幕截圖。 感謝你付出的努力!
int id=FirebaseAuth.getInstance.getCurrentUser.getUid(); currentUserRef=FirebaseDatabase.getInstance().getReference().child("Menu").child(id);
放入OnCreate method
adapterR=new MyAdapter( listOnline2.this, menu );
listOnline21.setAdapter( adapterR );
使用這一行onDataChange method
adapterR.notifyDataSetChanged();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.