Parte 16 «Crear una aplicación de redes sociales en Android Studio»
- Vamos a Recuperar Blogs Escritos por usuarios en su fragmento de perfil.
- Como anteriormente, ya hemos agregado datos de usuarios en el fragmento de perfil, como correo electrónico, nombre y foto de perfil.
- Aquí también vamos a recuperar Blogs escritos por el usuario actual en su perfil.
- Veamos la implementación de mostrar los blogs escritos por el usuario actual.
Implementación paso a paso
Paso 1: Trabajar con el archivo fragment_profile.xml
Aquí estamos agregando un RecyclerView para ver los blogs publicados por el usuario actual.
XML
<?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>
Paso 2: trabajar con el archivo ProfileFragment.java
Aquí vamos a recuperar el valor del Node Publicaciones de tal manera que el uid del usuario actual sea igual al uid del usuario que tiene una publicación.
DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Posts"); Query query=databaseReference.orderByChild("uid").equalTo(uid);
Fragmento de perfil.java
Java
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); } }
Producción:
Para ver todos los archivos dibujables utilizados en este artículo, consulte este enlace: https://drive.google.com/drive/folders/1M_knOH_ugCuwSP5nkYzeD4dRp-Honzbe?usp=sharing
A continuación se muestra la estructura final del archivo después de realizar estas operaciones:
Enlace de GitHub para este proyecto: https://github.com/Anni1123/SocialMediaPlatform