Получить несколько пользователей из Firebase и показать информацию о пользователе на ArrayList - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть свой собственный адаптер (работает отлично), и он создается следующим образом:

public class myOwnAdapter extends RecyclerView.Adapter<myOwnAdapter.ViewHolder> {

    private ArrayList<itemList> ListOfUsers;

    private ItemClickListener mClickListener;


    public myOwnAdapter(ArrayList<itemList> exampleList) {

        ListOfUsers = exampleList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
        ViewHolder theViewHolder = new ViewHolder(view);

        return theViewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        itemList UserInfo = ListOfUsers.get(position);

        holder.mTextView1.setText(UserInfo.getNamee());
        holder.mTextView2.setText(UserInfo.getEmaill());
        holder.mTextView3.setText(String.valueOf(UserInfo.getAge()));

    }

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


    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener  {

        public TextView mTextView1;
        public TextView mTextView2;
        public TextView mTextView3;

        public ViewHolder(View itemView) {
            super(itemView);

            mTextView1 = itemView.findViewById(R.id.textView);
            mTextView2 = itemView.findViewById(R.id.textView2);
            mTextView3 = itemView.findViewById(R.id.textView3);
            itemView.setOnClickListener(this);

        }
        @Override
        public void onClick(View view) {
            if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
        }

    }


    public itemList getItem(int id) {
        return ListOfUsers.get(id);
    }


    public void setClickListener(myOwnAdapter.ItemClickListener itemClickListener) {
        this.mClickListener = itemClickListener;
    }


    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }
}

А вот мой класс itemList (который я хочу заменить):

public class itemList {
    private String Namee;
    private String Emaill;
    private int Age;

    public itemList(String name, String mail, int age) {
        Namee = name;
        Emaill = mail;
        Age = age;
    }

    public String getNamee() {
        return Namee;
    }

    public String getEmaill() {
        return Emaill;
    }

    public int getAge() {
        return Age;
    }
}

А в mainActivity я могу просто создать нового пользователя, такого как этот, и затем он добавляется к адаптеру recyclerview:

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

    final ArrayList<itemList> listOfUsers = new ArrayList<>();
    listOfUsers.add(new itemList("Tim", "Tim@hotmail.com", 2));


    mRecyclerView = findViewById(R.id.recyclerViewAKAvinduetHvorListaVises);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new myOwnAdapter(listOfUsers);

    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter.setClickListener(this);
    mRecyclerView.setAdapter(mAdapter);
}

Хорошо, так что сейчас я в основном хочу заменить класс itemList на мой собственный FireBaseclass (который работает, когда я получаю одного пользователя), но я хочу иметь возможность извлекать всех пользователей, чтобы показать имя, электронную почту, возраст и т. д. c. Мой класс Firebase уже расширяет класс FirebaseUserRegistration.class, который дополнительно расширяет класс UserClass (работает так же, как itemList).

Вот мой код, как я использую его для сбора информации о пользователе для пользователя:

public class FirebaseDataCollection extends FirebaseRegistration {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = database.getReference();

    public void getUserDetails() {
        final String user = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber();  //this is gonna be removed right?
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference additionalUserInfoRef = rootRef.child("Users");
        Query userQuery = additionalUserInfoRef.orderByKey().equalTo(user); // this is gonna be removed right?

        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    Map<String, Object> map = new HashMap<>();

                    String nameOfUser = ds.child("name").getValue(String.class);
                    int ageOfUser = ds.child("age").getValue(int.class);
                    String emailOfUser = ds.child("e-mail").getValue(String.class);

                    setEmail(emailOfUser);
                    setName(nameOfUser);
                    setAge(ageOfUser);

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(mActivity, "Something went wrong..", Toast.LENGTH_SHORT).show(); // this works perfectly. why?
            }
        };
        userQuery.addListenerForSingleValueEvent(valueEventListener);

    }
}

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

...