嗨,我是首次参加android编程,我设计了一个应用程序,当用户发表评论或希望我们收到推送通知时,我确实需要帮助。预先谢谢你...
嗨,我是首次参加android编程,我设计了一个应用程序,当用户发表评论或希望我们收到推送通知时,我确实需要帮助。预先谢谢你...
CommentActivity
package com.developer.fireone.finga;
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.widget.Toolbar;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.developer.fireone.finga.Adapter.CommentAdapter;
import com.developer.fireone.finga.Model.Comment;
import com.developer.fireone.finga.Model.User;
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.ValueEventListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
public class CommentsActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CommentAdapter commentAdapter;
private List<Comment> commentList;
EditText addcomment;
ImageView image_profile;
TextView post;
String postid;
String publisherid, currentDate, currentTime;
FirebaseUser firebaseUser;
boolean notify = false;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comments);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(R.string.comments1);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
Intent intent = getIntent();
postid = intent.getStringExtra("postid");
publisherid = intent.getStringExtra("publisherid");
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
commentList = new ArrayList<>();
commentAdapter = new CommentAdapter(this, commentList, postid);
recyclerView.setAdapter(commentAdapter);
addcomment = findViewById(R.id.add_comment);
image_profile = findViewById(R.id.image_profile);
post = findViewById(R.id.post);
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notify=true;
if(addcomment.getText().toString().equals("")){
Toast.makeText(CommentsActivity.this, R.string.pasdecommentvide, Toast.LENGTH_SHORT).show();
}else{
addComment();
}
}
});
getImage();
readComments();
}
private void addComment() {
Calendar calForDate = Calendar.getInstance();
SimpleDateFormat currentDateFormat = new SimpleDateFormat("MMM dd, yyyy");
currentDate = currentDateFormat.format(calForDate.getTime());
Calendar calForTime = Calendar.getInstance();
SimpleDateFormat currentTimeFormat = new SimpleDateFormat("hh:mm a");
currentTime = currentTimeFormat.format(calForTime.getTime());
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Comments").child(postid);
String commentid = reference.push().getKey();
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("comment", addcomment.getText().toString());
hashMap.put("publisher", firebaseUser.getUid());
hashMap.put("commentid", commentid);
hashMap.put("date", currentDate);
hashMap.put("time", currentTime);
reference.child(commentid).setValue(hashMap);
addNotifications();
addcomment.setText("");
}
private void addNotifications(){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(publisherid);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("userid", firebaseUser.getUid());
hashMap.put("text", getString(R.string.commenterxa)+" "+addcomment.getText().toString());
hashMap.put("postid", postid);
hashMap.put("ispost", true);
hashMap.put("isseen", false);
reference.push().setValue(hashMap);
}
private void getImage(){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
reference.keepSynced(true);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final User user = dataSnapshot.getValue(User.class);
Glide.with(getApplicationContext()).load(user.getImageurl()).into(image_profile);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void readComments(){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Comments").child(postid);
reference.keepSynced(true);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
commentList.clear();
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
Comment comment = snapshot.getValue(Comment.class);
commentList.add(comment);
}
commentAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
PostAdapter(例如此处)
package com.developer.fireone.finga.Adapter;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.developer.fireone.finga.CommentsActivity;
import com.developer.fireone.finga.FollowersActivity;
import com.developer.fireone.finga.Fragment.PostDetailFragment;
import com.developer.fireone.finga.Fragment.ProfileFragment;
import com.developer.fireone.finga.Model.ForAllUser;
import com.developer.fireone.finga.Model.Post;
import com.developer.fireone.finga.Model.User;
import com.developer.fireone.finga.R;
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.ValueEventListener;
import com.tylersuehr.socialtextview.SocialTextView;
import java.util.HashMap;
import java.util.List;
import static java.security.AccessController.getContext;
/**
* Created by user on 10/12/2018.
*/
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder>{
public Context mContext;
public List<Post> mPost;
public FirebaseUser firebaseUser;
public PostAdapter(Context mContext, List<Post> mPost) {
this.mContext = mContext;
this.mPost = mPost;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.post_item, viewGroup, false);
return new PostAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
final Post post = mPost.get(i);
viewHolder.finga_android.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, "Finga for Android V 1.0.0",Toast.LENGTH_LONG).show();
}
});
if(post.getType().equals("text")){
viewHolder.bord2.setVisibility(View.GONE);
viewHolder.bord1.setVisibility(View.GONE);
viewHolder.description.setTextSize(20);
viewHolder.post_image.setVisibility(View.GONE);
}else {
DatabaseReference referencepub = FirebaseDatabase.getInstance().getReference("ForAllUser");
referencepub.keepSynced(true);
referencepub.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(getContext() == null){
return;
}
final ForAllUser forAllUser = dataSnapshot.getValue(ForAllUser.class);
Glide.with(mContext).load(forAllUser.getPost_border()).into(viewHolder.bord1);
Glide.with(mContext).load(forAllUser.getPost_border()).into(viewHolder.bord2);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.post_image.setVisibility(View.VISIBLE);
Glide.with(mContext).load(post.getPostimage()).into(viewHolder.post_image);
}
//test hastag and mention
viewHolder.socialTextView.setLinkText(viewHolder.description.toString());
if(post.getDescription().equals("")){
viewHolder.description.setVisibility(View.GONE);
}else{
viewHolder.description.setVisibility(View.VISIBLE);
viewHolder.description.setText(post.getDescription());
}
publisherInfo(viewHolder.image_profile,viewHolder.username, viewHolder.fullname, viewHolder.publisher, post.getPublisher());
isLiked(post.getPostid(),viewHolder.like);
nrLikes(viewHolder.likes, post.getPostid());
getComments(post.getPostid(), viewHolder.comments);
isSave(post.getPostid(), viewHolder.save);
viewHolder.txt_date.setText(post.getDate());
viewHolder.txt_time.setText(post.getTime());
viewHolder.image_profile.setOnClickListener(view -> {
SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("profileid", post.getPublisher());
editor.apply();
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
});
viewHolder.username.setOnClickListener(view -> {
SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("profileid", post.getPublisher());
editor.apply();
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
});
viewHolder.publisher.setOnClickListener(view -> {
SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("profileid", post.getPublisher());
editor.apply();
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
});
viewHolder.post_image.setOnClickListener(view -> {
SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
editor.putString("postid", post.getPostid());
editor.apply();
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new PostDetailFragment()).commit();
});
viewHolder.save.setOnClickListener(view -> {
if(viewHolder.save.getTag().equals("save")){
FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid())
.child(post.getPostid()).setValue(true);
}else{
FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid())
.child(post.getPostid()).removeValue();
}
});
viewHolder.like.setOnClickListener(view -> {
if(viewHolder.like.getTag().equals("like")){
FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid())
.child(firebaseUser.getUid()).setValue(true);
addNotifications(post.getPublisher(), post.getPostid());
}else{
FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()).child(firebaseUser.getUid()).removeValue();
}
});
viewHolder.comment.setOnClickListener(view -> {
Intent intent = new Intent(mContext, CommentsActivity.class);
intent.putExtra("postid",post.getPostid());
intent.putExtra("publisherid",post.getPublisher());
mContext.startActivity(intent);
});
viewHolder.comments.setOnClickListener(view -> {
Intent intent = new Intent(mContext, CommentsActivity.class);
intent.putExtra("postid",post.getPostid());
intent.putExtra("publisherid",post.getPublisher());
mContext.startActivity(intent);
});
viewHolder.likes.setOnClickListener(view -> {
Intent intent = new Intent(mContext, FollowersActivity.class);
intent.putExtra("id", post.getPostid());
intent.putExtra("title", "likes");
mContext.startActivity(intent);
});
viewHolder.more.setOnClickListener(view -> {
PopupMenu popupMenu = new PopupMenu(mContext, view);
popupMenu.setOnMenuItemClickListener(menuItem -> {
switch (menuItem.getItemId()){
case R.id.edit:
editPost(post.getPostid());
return true;
case R.id.delete:
// FirebaseDatabase.getInstance().getReference("Posts")
// .child(post.getPostid()).removeValue()
// .addOnCompleteListener(new OnCompleteListener<Void>() {
// @Override
// public void onComplete(@NonNull Task<Void> task) {
// if(task.isSuccessful()){
// Toast.makeText(mContext, "Deleted!", Toast.LENGTH_SHORT).show();
// }
// }
// });
Toast.makeText(mContext, "nous y travaillons desole :)", Toast.LENGTH_SHORT).show();
return true;
case R.id.report:
Toast.makeText(mContext, "Report clicked!", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
});
popupMenu.inflate(R.menu.post_menu);
if(!post.getPublisher().equals(firebaseUser.getUid())){
popupMenu.getMenu().findItem(R.id.edit).setVisible(false);
popupMenu.getMenu().findItem(R.id.delete).setVisible(false);
}
popupMenu.show();
});
}
@Override
public int getItemCount() {
return mPost.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public ImageView image_profile, post_image, like, comment, save, more, bord0, bord1, bord2;
public TextView username, fullname, likes, publisher, description, comments, txt_time, txt_date, finga_android;
public SocialTextView socialTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
socialTextView=new SocialTextView(mContext);
finga_android=itemView.findViewById(R.id.finga_android);
image_profile=itemView.findViewById(R.id.image_profile);
bord0=itemView.findViewById(R.id.bord0);
bord1=itemView.findViewById(R.id.bord1);
bord2=itemView.findViewById(R.id.bord2);
post_image=itemView.findViewById(R.id.post_image);
like=itemView.findViewById(R.id.like);
comment=itemView.findViewById(R.id.comment);
save=itemView.findViewById(R.id.save);
username=itemView.findViewById(R.id.username);
fullname=itemView.findViewById(R.id.fullname);
likes=itemView.findViewById(R.id.likes);
publisher=itemView.findViewById(R.id.publisher);
description=itemView.findViewById(R.id.description);
comments=itemView.findViewById(R.id.comments);
more=itemView.findViewById(R.id.more);
txt_date=itemView.findViewById(R.id.txt_date);
txt_time=itemView.findViewById(R.id.txt_time);
}
}
private void getComments(String postid, final TextView comments ){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
comments.setText(mContext.getString(R.string.viewAll)+" "+dataSnapshot.getChildrenCount()+" "+mContext.getString(R.string.comments1));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
// isliked
private void isLiked(String postid, final ImageView imageView){
final FirebaseUser firebaseUser=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference=FirebaseDatabase.getInstance().getReference()
.child("Likes")
.child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(firebaseUser.getUid()).exists()){
imageView.setImageResource(R.drawable.ic_liked);
imageView.setTag("liked");
}else {
imageView.setImageResource(R.drawable.ic_like);
imageView.setTag("like");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void addNotifications(String userid, String postid){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(userid);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("userid", firebaseUser.getUid());
hashMap.put("text", mContext.getString(R.string.strlikePost));
hashMap.put("postid", postid);
hashMap.put("ispost", true);
hashMap.put("isseen", false);
reference.push().setValue(hashMap);
}
private void nrLikes(final TextView likes, String postid){
DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("Likes")
.child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
likes.setText(dataSnapshot.getChildrenCount()+" yamo.");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void publisherInfo(final ImageView image_profile, final TextView username, final TextView fullname, final TextView publisher, final String userid){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
Glide.with(mContext.getApplicationContext()).load(user.getImageurl()).into(image_profile);
username.setText(user.getUsername());
fullname.setText(user.getFullname());
publisher.setText(user.getUsername());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void isSave(final String postid, final ImageView imageView){
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Saves")
.child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(postid).exists()){
imageView.setImageResource(R.drawable.ic_saved);
imageView.setTag("saved");
}else{
imageView.setImageResource(R.drawable.ic_save_black);
imageView.setTag("save");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void editPost(final String postid){
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
alertDialog.setTitle(R.string.strEditPost);
final EditText editText = new EditText(mContext);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);
editText.setLayoutParams(lp);
alertDialog.setView(editText);
getText(postid, editText);
alertDialog.setPositiveButton(R.string.strEdit, (dialogInterface, i) -> {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("description", editText.getText().toString());
FirebaseDatabase.getInstance().getReference("Posts")
.child(postid).updateChildren(hashMap);
});
alertDialog.setNegativeButton(R.string.strCancel, (dialogInterface, i) -> dialogInterface.dismiss());
alertDialog.show();
}
private void getText(String postid, final EditText editText){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts")
.child(postid);
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
editText.setText(dataSnapshot.getValue(Post.class).getDescription());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}