Firebase не заполнен список - PullRequest
0 голосов
/ 07 июня 2019

Я создаю приложение для списка покупок Android, следуя учебному пособию по Angga Risky.

Код работает без ошибок, но созданный мной список не заполняется базой данных реального времени firebase, к которой он подключен.Ниже приведена основная активность

public class MainActivity extends AppCompatActivity {

    TextView titlepage, subtitlepage, endpage;

    DatabaseReference reference;
    RecyclerView ourlist;
    ArrayList < MyList > list;
    ListAdapter listAdapter;

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

        titlepage = findViewById(R.id.titlepage);
        subtitlepage = findViewById(R.id.subtitlepage);
        endpage = findViewById(R.id.endpage);

        //working with data
        ourlist = findViewById(R.id.ourlist);
        ourlist.setLayoutManager(new LinearLayoutManager(this));
        list = new ArrayList < MyList > ();

        //get data from firebase
        reference = FirebaseDatabase.getInstance().getReference().child("compshopper3");
        reference.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                //set code to retrieve data and replace layout
                for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren()) {
                    MyList p = dataSnapshot1.getValue(MyList.class);
                    list.add(p);
                }
                listAdapter = new ListAdapter(MainActivity.this, list);
                ourlist.setAdapter(listAdapter);
                listAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                // set code to show an error
                Toast.makeText(getApplicationContext(), "Dude Where's My Data???", Toast.LENGTH_SHORT).show();

            }

        });
    }
}

Здесь приведены данные о базе данных

enter image description here

Вот снимок с выхода эмулятора.

enter image description here

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Сначала измените ссылку, чтобы сослаться на родительский узел:

reference = FirebaseDatabase.getInstance().getReference().child("CompShopperApp");

Затем удалите цикл for внутри onDataChange() и убедитесь, что класс вашей модели содержит поля price1, price2, price3 и itemtitle:

    reference.addValueEventListener( new ValueEventListener () {

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            MyList p    = dataSnapshot.getValue(MyList.class);
            list.add(p);
            listAdapter = new ListAdapter(MainActivity.this, list);
            ourlist.setAdapter(listAdapter);
            listAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            // set code to show an error
            Toast.makeText(getApplicationContext(), "Dude Where's My Data???", Toast.LENGTH_SHORT).show();

        }
1 голос
/ 07 июня 2019

В дополнение к ответу @ peter-haddad, убедитесь, что ваши правила базы данных firebase позволяют вам получать доступ к данным без аутентификации, если вы пытаетесь это сделать (что мы обычно делаем во время тестирования dev).

Консоль Firebase -> База данных (База данных в реальном времени) -> Правила ->

{
 "rules": {
   ".read": true,
   ".write": true
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...