Приложение обновляет данные в базе данных в реальном времени Firebase, но ничего не показывает в представлении реселлера - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь добавить данные в базу данных Firbase в режиме реального времени и получить эти данные в программе recyclerview. Я успешно могу это сделать, но когда я пытаюсь извлечь данные из firebase, этого не происходит, даже если я пытаюсь распечатать свои данные в окне logacat я могу это сделать *

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/Senddata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:text="Send Data"
        app:layout_constraintBottom_toBottomOf="@+id/GetData"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/GetData" />

    <EditText
        android:id="@+id/Firstname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="41dp"
        android:layout_marginEnd="39dp"
        android:ems="10"
        android:hint="Enter Name"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toStartOf="@+id/Agee"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/GetData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="160dp"
        android:layout_marginEnd="40dp"
        android:text="Get Data"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/Agee"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="41dp"
        android:layout_marginEnd="40dp"
        android:ems="10"
        android:hint="Entre a Age"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/Firstname"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="345dp"
        android:layout_marginTop="55dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/Senddata" />
</androidx.constraintlayout.widget.ConstraintLayout>

mModelAdapter. java

    import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.shivam.fireapp.model.User;

import java.util.List;

public class mModelAdapter extends RecyclerView.Adapter<mModelAdapter.MyViewHolder> {
    private Context context;
    private List<User> mDataList;

    public mModelAdapter(Context context, List<User> mDataList) {
        this.context = context;
        this.mDataList = mDataList;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View rootView= LayoutInflater.from(context).inflate(R.layout.recycler_view_item,parent,false);

        return new MyViewHolder(rootView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        User user = mDataList.get(position);
        holder.textView.setText(user.getFirst_name()+"  |  "+user.getAgeeee());

    }

    @Override
    public int getItemCount() {
        return mDataList.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{
        TextView textView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewWithTag(R.id.textView);
        }
    }
}

Пользователь. java

    public class User {

    String first_name, ageeee;

    public User(String first_name, String ageeee) {
        this.first_name = first_name;
        this.ageeee = ageeee;
    }

    public User() {
    }

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getAgeeee() {
        return ageeee;
    }

    public void setAgeeee(String ageeee) {
        this.ageeee = ageeee;
    }
}

recycler_view_item. xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="TextView"
        android:textSize="24sp"
        android:gravity="center"/>
</LinearLayout>

Ответы [ 3 ]

1 голос
/ 04 марта 2020

Сначала я порекомендую вам не передавать список в адаптере. Создайте метод setList в адаптере.

Если вы все еще передаете list в адаптере, ПОПРОБУЙТЕ ЭТОТ

Замените это в строке childadded метод

  modelAdapter.notifyDataSetChanged();

на это две строки

    modelAdapter = new mModelAdapter(this,mDataList); //this will recreate the adapter with new data
    mRecyclerView.setAdapter(modelAdapter); //Again set adapter to recyclerview
1 голос
/ 04 марта 2020

java внутренний класс не имеет доступа к внешней локальной объявленной переменной. Так что вам нужно сделать

 public List<User> mDataList = new ArrayList<>();

ИЛИ

использовать интерфейс

1 голос
/ 04 марта 2020

У меня была такая же проблема. Его причина в том, что, когда firebase еще не прочитал данные из базы данных в реальном времени, было выполнено повторное рассмотрение; и у него еще нет данных. Чтобы решить эту проблему, вам следует обратиться к реселлерам, если вы уверены, что Firebase прочитал данные. Затем будет выполнен повторный просмотр с правильными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...