This is the Part 16 of "Build a Social Media App on Android Studio" tutorial, and we are going to cover the following functionalities in this article:
- We are going to Retrieve Blogs Written by users on their profile fragment.
- As previously we have already added Data of users in Profile Fragment like email, name, and profile pic.
- Here we are also going to retrieve Blogs Written By the current user on their profile.
- Let's See the implementation of showing the blogs written by the current user.
Step By Step Implementation
Step 1: Working with the fragment_profile.xml file
Here we are adding a RecyclerView to view the blogs posted by the current user.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F1EDED"
tools:context=".ProfileFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/cavertv"
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="@color/colorPrimaryDark"
android:scaleType="fitXY"></ImageView>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_marginTop="100dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/avatartv"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="center_horizontal"
android:layout_marginStart="20dp"
android:background="@color/colorPrimary"
android:padding="5dp"
android:src="@drawable/ic_images" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#77000000"
android:orientation="vertical">
<TextView
android:id="@+id/nametv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:textColor="@color/colorWhite"
android:textSize="25sp" />
<TextView
android:id="@+id/emailtv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:textColor="@color/colorWhite" />
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerposts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/linearLayout" />
</RelativeLayout>
</ScrollView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_margin="10dp"
android:src="@drawable/ic_edit_white" />
</RelativeLayout>
Step 2: Working with the ProfileFragment.java file
Here we are going to retrieve value from the Posts node in such a way that uid of the current user is equal to uid of the user having a post
DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Posts");
Query query=databaseReference.orderByChild("uid").equalTo(uid);
Below is the code for the ProfileFragment.java file.
package com.example.socialmediaapp;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.StorageReference;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class ProfileFragment extends Fragment {
private FirebaseAuth firebaseAuth;
FirebaseUser firebaseUser;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
ImageView avatartv, covertv;
TextView nam, email, phone;
RecyclerView postrecycle;
StorageReference storageReference;
String storagepath = "Users_Profile_Cover_image/";
FloatingActionButton fab;
List<ModelPost> posts;
AdapterPosts adapterPosts;
String uid;
ProgressDialog pd;
private static final int CAMERA_REQUEST = 100;
private static final int STORAGE_REQUEST = 200;
private static final int IMAGEPICK_GALLERY_REQUEST = 300;
private static final int IMAGE_PICKCAMERA_REQUEST = 400;
String cameraPermission[];
String storagePermission[];
Uri imageuri;
public ProfileFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_profile, container, false);
firebaseAuth = FirebaseAuth.getInstance();
firebaseUser = firebaseAuth.getCurrentUser();
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("Users");
avatartv = view.findViewById(R.id.avatartv);
nam = view.findViewById(R.id.nametv);
email = view.findViewById(R.id.emailtv);
uid = FirebaseAuth.getInstance().getUid();
fab = view.findViewById(R.id.fab);
postrecycle = view.findViewById(R.id.recyclerposts);
posts = new ArrayList<>();
pd = new ProgressDialog(getActivity());
loadMyPosts();
pd.setCanceledOnTouchOutside(false);
// Retrieving user data from firebase
Query query = databaseReference.orderByChild("email").equalTo(firebaseUser.getEmail());
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String name = "" + dataSnapshot1.child("name").getValue();
String emaill = "" + dataSnapshot1.child("email").getValue();
String image = "" + dataSnapshot1.child("image").getValue();
nam.setText(name);
email.setText(emaill);
try {
Glide.with(getActivity()).load(image).into(avatartv);
} catch (Exception e) {
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), EditProfilePage.class));
}
});
return view;
}
private void loadMyPosts() {
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
postrecycle.setLayoutManager(layoutManager);
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Posts");
Query query = databaseReference.orderByChild("uid").equalTo(uid);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
posts.clear();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
ModelPost modelPost = dataSnapshot1.getValue(ModelPost.class);
posts.add(modelPost);
adapterPosts = new AdapterPosts(getActivity(), posts);
postrecycle.setAdapter(adapterPosts);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
}
Output:
Note: Please Add drawable items before running the Application
Below is the final file structure after performing these operations:
GitHub link for this project: https://github.com/Anni1123/SocialMediaPlatform