Firebase – невозможно прочитать данные в интерфейсе приложения – Android Studio

Я разрабатываю приложение для управления задачами на Android Studio с Firebase. Я создал класс для добавления данных в базу данных, но я пробовал несколько подходов для интеграции и чтения данных в приложении без прогресса.

Основная активность.java

database = FirebaseDatabase.getInstance();
    ref = database.getReference().child("Task List");
    final ArrayList<String> mTaskName = new ArrayList<>();

    taskListView = (ListView) findViewById(R.id.taskListView);
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.task_info, mTaskName);
    taskListView.setAdapter(arrayAdapter);
    ref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            String value = dataSnapshot.getValue(String.class);
            mTaskName.add(value);
            arrayAdapter.notifyDataSetChanged();

        }

add_task.java

 mDatabase = FirebaseDatabase.getInstance().getReference().child("Task List"); // Reference database

    addTaskbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String taskName = newTask.getText().toString().trim();
            String date = dateField.getText().toString().trim();
            String assignee = spinnerAssign.getSelectedItem().toString();
            String descrip = description.getText().toString();

            if (!TextUtils.isEmpty(taskName) && !TextUtils.isEmpty(date)) {

                HashMap<String, String> taskData = new HashMap<>();
                taskData.put("Name", taskName);
                taskData.put("Date", date);
                taskData.put("Assigned to", assignee);
                taskData.put("Description", descrip);

                mDatabase.push().setValue(taskData).addOnCompleteListener(new OnCompleteListener<Void>() {

База данных устроена следующим образом:

список задач для менеджеров

-Список задач

-PushID
-Назначено: "Имя"
-Дата: "Дата"
-Описание: "Описание"
-Name: «Имя задачи»

вызывается ли обратный вызов OnCompleteListener с успешным результатом? Чтобы на самом деле отобразить данные, попробуйте реализовать «addSingleValueEventListener» вместо «ChildEventListener».

Marco 21.01.2019 17:13

Привет, Марко, ты это имеешь в виду? 'ref.addValueEventListener (новый ValueEventListener() { Переопределить public void onDataChange (NonNull DataSnapshot dataSnapshot) { for (DataSnapshot ds: dataSnapshot.getChildren()) { task = ds.getValue(Task.class); list.add(task.getName ()); }//для taskListView.setAdapter(adapter); } Переопределить public void onCancelled(NonNull DatabaseError databaseError) { } });'

Alex 21.01.2019 17:22

если вам нужно только показать список, используйте 'addListenerForSingleValueEvent', который запускается только один раз (для получения списка), как описано здесь: firebase.com/docs/android/guide/…. Не забудьте вызвать «notifyDataSetChanged()», чтобы обновить локальный список.

Marco 21.01.2019 17:27

Я реализовал это, но, похоже, ничего не изменилось. Я не получаю никаких данных в представлении списка. Также, если я попытаюсь перейти на страницу add_task, мое приложение вылетит.

Alex 21.01.2019 17:34

Также, чтобы прояснить ситуацию, я хочу иметь возможность просматривать данные с добавлением или без добавления новых данных через приложение.

Alex 21.01.2019 17:37

Правильно ли данные хранятся в Firebase? Кроме того, я настоятельно рекомендую вам использовать компонент «FirebaseUI» (github.com/firebase/FirebaseUI-Android/blob/master/database‌​/…): в основном вы можете прикрепить запрос прямо к RecyclerView. Если вы хотите сделать это вручную, убедитесь, что оба обратных вызова («OnCompleteListener» для записи данных и «onChildAdded» для чтения данных) вызываются успешно.

Marco 21.01.2019 17:44

Я еще не особенно привык к recyclerView, раньше я использовал другой подход с recyclerView, но мне и с этим не повезло.

Alex 21.01.2019 18:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
 ValueEventListener eventListener = new ValueEventListener() {
        //Searching the database and adding each to list
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                //adding the key to an arraylist to be referenced when deleting records or passing intents from specific button
                mTaskName.add(ds.getKey());
                String name = ds.child("Name").getValue(String.class);
                String date = ds.child("Date").getValue(String.class);
                id.add(name  + "\n" + date);
                Log.d("TAG", name);
            }
            taskListView.setAdapter(arrayAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    };
    database.addListenerForSingleValueEvent(eventListener);

Другие вопросы по теме