Android: чтение значения от ребенка с FirebaseUI - PullRequest
0 голосов
/ 30 мая 2018

Я использую FirebaseUI для получения некоторых значений из моей базы данных в реальном времени в Firebase RecyclerView.Итак ... мои данные выглядят так:

users:
      userid:
            info:
                 Name:Muhammad

Я не знаю, как получить значение Name, что означает, что именно я должен делать в классе Users?Вот мой код (я думаю, что проблема в классе пользователя, я просто не знаю, как получить доступ к дочерней информации)

public class User {
    private String name;
    private String email;
    private String state;
    private String image;
    private String thumbnail;

    public User(String name, String state, String image) {
        this.name = name;
        this.state = state;
        this.image = image;
    }

    public User() {
    }

    public String getName() {
        return name;
    }

    public String getState() {
        return state;
    }

    public String getImage() {
        return image;
    }
}

моя основная деятельность myDB ссылается и на метод запуска (обновляется после SUPERCILEXкомментарий)

mDb = FirebaseDatabase.getInstance().getReference().child(App_Constants.USERS_COLUMN);



 @Override
    protected void onStart() {
        super.onStart();

        Query query = mDb;

        FirebaseRecyclerOptions<User> options = new FirebaseRecyclerOptions.Builder<User>()
                .setQuery(query, new SnapshotParser<User>() {
                    @NonNull
                    @Override
                    public User parseSnapshot(@NonNull DataSnapshot snapshot) {
                        String Name = snapshot.child(App_Constants.INFO_COLUMN).child(App_Constants.NAME_COLUMN).getValue().toString();
                        String State = snapshot.child(App_Constants.INFO_COLUMN).child(App_Constants.STATE_COLUMN).getValue().toString();
                        String Image = snapshot.child(App_Constants.INFO_COLUMN).child(App_Constants.IMAGE_COLUMN).getValue().toString();
                        User user = new User(Name,State,Image);

                        return user;
                    }
                }).build();

        FirebaseRecyclerAdapter<User,Users_ViewHolder> adapter = new FirebaseRecyclerAdapter<User, Users_ViewHolder>(options) {
            @NonNull
            @Override
            public Users_ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_user,parent,false);
                return new Users_ViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull Users_ViewHolder holder, int position, @NonNull User model) {

                holder.Set_Name(model.getName());
                holder.Set_Image(model.getImage());
                holder.Set_State(model.getState());
            }
        };
        mUsers.setAdapter(adapter);
    }

my ViewHolder

public class Users_ViewHolder extends RecyclerView.ViewHolder{

    View mView;
    public Users_ViewHolder(View itemView) {
        super(itemView);

        mView = itemView;
    }

    public void Set_Name(String Name)
    {
        TextView mName = mView.findViewById(R.id.tv_single_user_name);
        mName.setText(Name);
    }


    public void Set_Image(String url)
    {
        CircleImageView mImage = mView.findViewById(R.id.iv_single_user);
        Picasso.get().load(url).placeholder(R.drawable.profile).into(mImage);
    }


    public void Set_State(String State)
    {
        TextView mState = mView.findViewById(R.id.tv_single_user_state);
        mState.setText(State);
    }
}

спасибо

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Несколько советов: не могли бы вы поменять имена заданных методов?от Set_State до setState, у меня тоже были подобные проблемы, пожалуйста, соблюдайте правила именования Java соглашения

Также добавьте методы set в свою пользовательскую модель

Секунда:

 FirebaseRecyclerOptions<User> options =
                new FirebaseRecyclerOptions.Builder<User>()
                        .setQuery(query, User.class)
                        .build();

Начать прослушивание:

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

stopListening() вызов удаляет прослушиватель событий и все данные в адаптере

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

Здесь выочень хороший объясненный пример

0 голосов
/ 31 мая 2018

Я верю, что это будет Map<String, Object> на поле info.Тем не менее, вы всегда можете использовать пользовательский SnapshotParser для построения модели по своему вкусу: https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md#using-the-firebaserecycleradapter.

...