Как получить изображение и текст из базы FireBase в режиме повторного просмотра? - PullRequest
0 голосов
/ 06 июля 2019

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

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

//saves user image and description inside Firebase 
public void saveToFirebase(){
    String userId = mAuth.getCurrentUser().getUid();
    userPost = new (selectedImageUri,descriptionEditText.getText().toString());
    postDictionary.put("PostImage", userPost.getImage().toString());
    postDictionary.put("Description", userPost.getDescription());
    productsDatabaseRef.child("Producuts").child(userId).push().setValue(postDictionary);
}

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
    Context context;
    ArrayList<Post> userPost;

    public Adapter(Context context, ArrayList<Post> userPost){
        context = context;
        userPost = userPost;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.shop_layout_design,viewGroup, false));
    }

    //this is where you set the value for the ui elements
    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        viewHolder.title.setText(userPost.get(i).getDescription());
        Picasso.get().load(userPost.get(i).getImage()).into(viewHolder.postImage);
    }

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


    //links up ui elements
    class ViewHolder extends  RecyclerView.ViewHolder{

        TextView title;
        TextView description;
        ImageView postImage;

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

            title = itemView.findViewById(R.id.post_title);
            description = itemView.findViewById(R.id.post_desc);
            postImage = itemView.findViewById(R.id.post_image);
        }
    }
}

1 Ответ

0 голосов
/ 07 июля 2019

Это зависит от вашей реализации. Если у вас есть группа узлов, подобная этой:

master / root (база данных Firebase):

Тогда вам нужно будет добавить ValueEventListener в ваш класс базы данных в вашем коде. Оттуда с помощью снимка данных вы можете сделать это так:

ArrayList<String> info = new ArrayList<>();
DatabaseReference reference = database.getReference().child("item-1");

reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
            info.put(childSnapshot.getKey(), childSnapshot.getValue().toString()); //Getting the information of each item.
        }

        InfoAdapter adapter = new InfoAdapter(stats); //Your adapter
        listView.setAdapter(adapter); //Setting the adapter
    }
}

Затем вы можете проанализировать информацию в вашем адаптере. Используя цикл, который увеличивается на 2 (потому что у нас есть два информационных элемента в массиве по одному элементу из базы данных), вы сможете получить доступ к информации, выполнив arraylist.get (i) и arraylist.get (i + 1). ).

Вы даже можете подумать об использовании хэш-карты, которая была бы более эффективной. Это зависит от тебя. Надеюсь, это поможет!

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