0

I'm working on this project where users are able to upload more than one character image along with other information. Such as the name of the character, what the character will do, the color of the character and its height. Now everything saves successfully in the database. However, when I want to display all of the character's information on the user's profile page, using a recyclerView, the saved information in the database will not display on the user's profile page. Below is my code. Thanks in advance Database Structure

 //Users profile page

      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        overridePendingTransition(R.anim.slide_right, R.anim.slide_left);




        mUploads = new ArrayList<>();

        mAdapter = new ImageAdapter(getApplicationContext(), mUploads);


        recyclerView = findViewById(R.id.recyclerView);
        //recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(mAdapter);
        mAdapter.notifyDataSetChanged();


        if (firebaseAuth != null) {
            databaseReference = FirebaseDatabase.getInstance().getReference("Users");
            String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();


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




            //upload = findViewById(R.id.button_upload);
            //button2 = findViewById(R.id.submit);
            //imageView = findViewById(R.id.view_image);
            //upload.setOnClickListener(this);


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

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



                        String imageUrl = (String) postsnapshot.child("mImageUrl").getValue();
                        mUploads.add(imageUrl);
                        //mUploads = new ArrayList<>();


                    }


                    mAdapter.notifyDataSetChanged();


                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(ProfileActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

                }
            });
        }

    }

   //Model Upload.class

   public class Upload {
    private String mImageUrl;

    public Upload(){
        //Empty constructor needed
    }

    public Upload (String imageUrl){
        mImageUrl=imageUrl;

    }

    public String getmImageUrl() {
        return mImageUrl;
    }

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


// Image adapter class

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

    private Context mContext;
    private List<String> mUploads;

    public ImageAdapter(Context context, List<String> uploads){
        mContext = context;
        mUploads = 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=mUploads.get(position);
        Picasso.get().load(uploadCurrent).fit().centerCrop().into(holder.imageView);

    }

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

    }

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

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

            imageView=itemView.findViewById(R.id.imageview);
        }
    }
}
t5050
  • 69
  • 8

2 Answers2

0

If you want to read inside the children of children, you need to do double loop like this.

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

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

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

                        String imageUrl = snapshot.child("mImageUrl").getValue(String.class);
                        mUploads.add(imageUrl);
                        //mUploads = new ArrayList<>();

                    }


                }


                mAdapter.notifyDataSetChanged();


            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(ProfileActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

            }
        });

Edited:

If you want to pass all of them, you need to change a bit of your model class

public class Upload {
    private String mImageUrl;
    private String Character_Name;
    private String What_Character_Does;
    private String color;
    private String height;

public Upload() {
    //Empty constructor needed
}

public Upload(String imageUrl) {
    mImageUrl = imageUrl;
}

public String getmImageUrl() {
    return mImageUrl;
}

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

public String getCharacter_Name() {
    return Character_Name;
}

public void setCharacter_Name(String character_Name) {
    Character_Name = character_Name;
}

public String getWhat_Character_Does() {
    return What_Character_Does;
}

public void setWhat_Character_Does(String what_Character_Does) {
    What_Character_Does = what_Character_Does;
}

public String getColor() {
    return color;
}

public void setColor(String color) {
    this.color = color;
}

public String getHeight() {
    return height;
}

public void setHeight(String height) {
    this.height = height;
}

}

Ticherhaz FreePalestine
  • 2,738
  • 4
  • 20
  • 46
0

Change this:

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

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



                        String imageUrl = (String) postsnapshot.child("mImageUrl").getValue();
                        mUploads.add(imageUrl);
                        //mUploads = new ArrayList<>();


                    }


                    mAdapter.notifyDataSetChanged();


                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(ProfileActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

                }
            });

into this:

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

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



                        String imageUrl =  postsnapshot.child("mImageUrl").getValue(String.class);
                        mUploads.add(imageUrl);
                        //mUploads = new ArrayList<>();     
                        mAdapter.notifyDataSetChanged();

                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(ProfileActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

                }
            });
Peter Haddad
  • 78,874
  • 25
  • 140
  • 134