Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在RecyclerView中显示从Firebase检索到的数据_Java_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

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

Java 无法在RecyclerView中显示从Firebase检索到的数据,java,firebase-realtime-database,android-recyclerview,Java,Firebase Realtime Database,Android Recyclerview,我相信我的recyclerView已经成功地从firebase检索到数据,因为它在我的recycler视图中显示了2个cardView,这与在我的firebase中菜单下分配的数据数量相同 我有3个类,分别是listOnline2、MyAdapter和cMenu。lisOnline2和MyAdapter中都有一个数组。我使用listOnline2中的数组存储从firebase检索到的数据,并使用MyAdapter中的数组查看cardview中的数据。下面是我对listOnline2类的编码

我相信我的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 );
}`

我可以如何显示从Firebase检索到的存储数据的阵列中的数据?请给我一个建议,因为我花了两天的时间来研究这些代码。提前谢谢你

int id=FirebaseAuth.getInstance.getCurrentUser.getUid();
currentUserRef=FirebaseDatabase.getInstance().getReference().child(“菜单”).child(id)

输入
OnCreate方法

adapterR=new MyAdapter( listOnline2.this, menu );
listOnline21.setAdapter( adapterR );
使用此行
onDataChange方法

adapterR.notifyDataSetChanged();

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

fName to menuName

fDesc到foodDescription

价格比


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

我认为recyclerView不能改变数据。只能使用适配器。如果我错了,请更正。是的,对不起,我的坏适配器只能通知DataSetChangedSorry,在我的菜单下,它不是当前用户的id。谢谢尝试!
adapterR=new MyAdapter( listOnline2.this, menu );
listOnline21.setAdapter( adapterR );
adapterR.notifyDataSetChanged();