这是16的“建立一个社交媒体应用程序在Android工作室”教程中的一部分,我们将要在本文中介绍了以下功能:
- 我们将检索用户在其个人资料片段上撰写的博客。
- 如前所述,我们已经在个人资料片段中添加了用户数据,例如电子邮件,姓名和个人资料图片。
- 在这里,我们还将检索由当前用户在其个人资料上撰写的博客。
- 让我们看一下显示当前用户撰写的博客的实现。
分步实施
步骤1:使用fragment_profile.xml文件
在这里,我们添加了RecyclerView来查看当前用户发布的博客。
XML
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 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);
}
}
步骤2:使用ProfileFragment。 Java文件
在这里,我们将从Posts节点检索值,以使当前用户的uid等于拥有帖子的用户的uid。
DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Posts");
Query query=databaseReference.orderByChild("uid").equalTo(uid);
下面是ProfileFragment的代码。 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 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);
}
}
输出:
对于本文中使用的所有可绘制文件,请参考以下链接: https://drive.google.com/drive/folders/1M_knOH_ugCuwSP5nkYzeD4dRp-Honzbe?usp=sharing
下面是执行这些操作后的最终文件结构:
该项目的GitHub链接: https : //github.com/Anni1123/SocialMediaPlatform