получение ошибки com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.util.HashMap в строку

Я пытаюсь получить сохраненные данные пользователей и отобразить их на странице своего профиля, используя представление переработчика. Когда я запускаю свое приложение, чтобы убедиться, что все работает нормально, но мое приложение продолжает падать и перестает работать. Ошибка, которую мне дают, это com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String. У меня это работало раньше, но я не уверен, в чем проблема сейчас. Может ли кто-нибудь помочь мне решить эту проблему. Заранее спасибо. Обновлена ​​база данных

Адаптер изображения

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder>{

    private Context mContext;
    private ArrayList<UserInformation> users;

    public ImageAdapter(Context context, ArrayList<UserInformation> uploads){
        mContext = context;
        users = uploads;

    }

    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View V = LayoutInflater.from(mContext).inflate(R.layout.cardview, parent, false);
        return new ImageViewHolder(V);


    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
        //String uploadCurrent=users.get(position).getmImageUrl();

        holder.txt1.setText(users.get(position).getAction());
        Picasso.get().load(users.get(position).getmImageUrl()).fit().centerCrop().into(holder.imageView);

    }

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

    }

    public class ImageViewHolder extends RecyclerView.ViewHolder{
        public ImageView imageView;
        public TextView txt1;

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

            imageView=itemView.findViewById(R.id.imageview);
            //txt1=itemView.findViewById(R.id.action);
        }
    }
}

Класс модели

  public UserInformation(String  mImageUrl,  String cate, String action, String headline, String websiteurl) {

        this.mImageUrl =  mImageUrl;
        this.cate = cate;
        this.action = action;
        this.headline = headline;
        this.websiteurl = websiteurl;

    }

    public UserInformation() {

    }

    public String getmImageUrl() {
        return mImageUrl;
    }

    public void setmImageUrl(String mImageUrl) {
        this.mImageUrl = mImageUrl;
    }


    public String getCategory() {
        return cate;
    }

    public void setCategory(String category) {
        this.cate = cate;
    }

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public String getHeadline() {
        return headline;
    }

    public void setHeadline(String header) {
        this.headline = headline;
    }

    public String getWebsiteurl() {
        return websiteurl;
    }

    public void setWebsiteurl(String websiteurl) {
        this.websiteurl = websiteurl;
    }
}

Основной класс

recyclerView = findViewById(R.id.recyclerView);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),3);

recyclerView.setLayoutManager(layoutManager);
myUploads = new ArrayList<UserInformation>();
aAdapter = new ImageAdapter(ProfileActivity.this, myUploads);
recyclerView.setAdapter(aAdapter);
aAdapter.notifyDataSetChanged();

h=new Handler();

databaseReference = FirebaseDatabase.getInstance().getReference("Users");
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

firebaseStorage = FirebaseStorage.getInstance();
storageReference = firebaseStorage.getReference();

firebaseUser = firebaseAuth.getInstance().getCurrentUser();
t=findViewById(R.id.none);

    databaseReference.child(uid).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {

                UserInformation upload=postsnapshot.getValue(UserInformation.class);


                myUploads.add(upload);
                 aAdapter = new ImageAdapter(ProfileActivity.this, myUploads);
                 recyclerView.setAdapter(aAdapter);

            }

person steph    schedule 29.04.2020    source источник
comment
Добавьте снимок экрана базы данных к своему вопросу, а не в виде ссылки.   -  person Hasan Bou Taam    schedule 30.04.2020


Ответы (1)


Насколько я вижу, ваш код чтения сводится к:

databaseReference = FirebaseDatabase.getInstance().getReference("Users");
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

databaseReference.child(uid).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {

            UserInformation upload=postsnapshot.getValue(UserInformation.class);


            myUploads.add(upload);
             aAdapter = new ImageAdapter(ProfileActivity.this, myUploads);
             recyclerView.setAdapter(aAdapter);

        }

Это означает, что вы подключаете прослушиватель к /Users/$uid в базе данных и что ваш onDataChange будет вызываться с моментальным снимком данных для одного пользователя.

В этом случае вам не нужно зацикливаться на snapshot.getChildren() в onDataChange, так как вы уже настроили прослушиватель для чтения одного снимка по точному пути. Так:

databaseReference = FirebaseDatabase.getInstance().getReference("Users");
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

databaseReference.child(uid).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        UserInformation upload = dataSnapshot.getValue(UserInformation.class);

        myUploads.add(upload);
        aAdapter = new ImageAdapter(ProfileActivity.this, myUploads);
        recyclerView.setAdapter(aAdapter);
    }

person Frank van Puffelen    schedule 29.04.2020
comment
Ван Паффен, спасибо за ответ. Я выполнил то, что вы сказали мне сделать, но теперь ничего похожего на изображение, которое было сохранено, не отображается, это просто карточка без ничего. - person steph; 30.04.2020
comment
Что лучше, чем сбой, поэтому я бы рассмотрел этот процесс. :) Если вы хотите проверить, работает ли изменение кода, поставьте точку останова на строке UserInformation upload = dataSnapshot.getValue(UserInformation.class) между исходным кодом и обновлением. Если upload имеет значения после этой строки в обновлении, он может прочитать значения из базы данных, а следующая проблема находится ниже по течению. - person Frank van Puffelen; 30.04.2020
comment
То, как вы храните mImageUrl в базе данных, затрудняет вам его чтение. Это отдельная проблема, поэтому я рекомендую посмотреть здесь или открыть новый вопрос специально для этого. В общем, вы должны работать над тем, чтобы изолировать свою проблему настолько, чтобы мой ответ был либо правильным, либо неправильным, а не частично правильным, как здесь. - person Frank van Puffelen; 30.04.2020
comment
Извините за задержку. У меня все еще есть проблемы с этим. Изображения не отображаются, я просто получаю пустую карточку. Я даже исправил способ хранения части mImageUrl, которую вы можете посмотреть в обновленной базе данных выше. Я не уверен, в чем проблема? - person steph; 06.05.2020