Java 如何禁用向自身发送好友请求的按钮?
在我的聊天应用程序(如WhatsApp)中,我还添加了friend req功能,在该功能中,用户可以是firebase数据库的朋友,也可以是firebase数据库的非朋友。现在我的应用程序中的错误是:我不能向自己发送好友请求,它必须不可见按钮,但我不知道我应该隐藏在哪里。我有点困惑 控制我的应用程序的流程: 新的应用程序安装-登录/注册(StartActivity)-重定向到MainActivity-在这里我设置菜单布局和OnOptions ItemSelected(MenuItem项)-因此有所有用户选项-从那里我选择任何特定用户(UsersActivity)-因此它打开该用户的用户配置文件(即ProfileActivity)-在那里我将获得send friend req选项 但在“所有用户”活动中,和其他用户一样,我也会在列表中显示,当我在个人资料上单击它时,它会显示与其他用户相同的内容,并显示“发送好友请求”选项。你怎么能隐瞒呢 我附加了UsersActivity(包括我在内的所有用户都显示在这里)和ProfileActivity(在这里特定的用户配置文件将打开,在那里我可以得到sendfriendreq选项) UsersActivity.javaJava 如何禁用向自身发送好友请求的按钮?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,在我的聊天应用程序(如WhatsApp)中,我还添加了friend req功能,在该功能中,用户可以是firebase数据库的朋友,也可以是firebase数据库的非朋友。现在我的应用程序中的错误是:我不能向自己发送好友请求,它必须不可见按钮,但我不知道我应该隐藏在哪里。我有点困惑 控制我的应用程序的流程: 新的应用程序安装-登录/注册(StartActivity)-重定向到MainActivity-在这里我设置菜单布局和OnOptions ItemSelected(MenuItem项)-因此有
package com.jimmytrivedi.lapitchat;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ServerValue;
import com.squareup.picasso.Picasso;
import de.hdodenhof.circleimageview.CircleImageView;
public class UsersActivity extends AppCompatActivity {
private Toolbar toolbar;
private RecyclerView recyclerView;
private DatabaseReference databaseReference, UserDatabaseReference;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_users);
toolbar = findViewById(R.id.usersToolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("All Users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mAuth = FirebaseAuth.getInstance();
UserDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(mAuth.getCurrentUser().getUid());
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
databaseReference.keepSynced(true);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(UsersActivity.this));
}
@Override
public void onStart() {
super.onStart();
startListening();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
UserDatabaseReference.child("Online").setValue("true");
}
}
@Override
protected void onPause() {
super.onPause();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
UserDatabaseReference.child("Online").setValue(ServerValue.TIMESTAMP);
}
}
public void startListening() {
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("Users")
.limitToLast(50);
FirebaseRecyclerOptions<Users> options =
new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(query, Users.class)
.build();
FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users users) {
holder.setName(users.getName());
holder.setStatus(users.getStatus());
holder.setThumbImage(users.getThumbImage());
final String userID = getRef(position).getKey();
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(UsersActivity.this, ProfileActivity.class);
intent.putExtra("userID", userID);
startActivity(intent);
}
});
}
@NonNull
@Override
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.users_single_layout, parent, false);
return new UsersViewHolder(view);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
public static class UsersViewHolder extends RecyclerView.ViewHolder {
View mView;
public UsersViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setName(String name) {
TextView userName = mView.findViewById(R.id.userName);
userName.setText(name);
}
public void setStatus(String status) {
TextView userStatus = mView.findViewById(R.id.userStatus);
userStatus.setText(status);
}
public void setThumbImage(String thumbImage) {
CircleImageView circleImageView = mView.findViewById(R.id.userImage);
Picasso.get().load(thumbImage).placeholder(R.drawable.defaultimage)
.into(circleImageView);
}
}
}
package com.jimmytrivedi.lapitchat;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.support.v7.widget.Toolbar;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入com.firebase.ui.database.FirebaseRecyclerAdapter;
导入com.firebase.ui.database.FirebaseRecyclerOptions;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.Query;
导入com.google.firebase.database.ServerValue;
导入com.squareup.picasso.picasso;
导入de.hdodenhof.circleimageview.circleimageview;
公共类UsersActivity扩展了AppCompatActivity{
专用工具栏;
私人回收站;
私有数据库引用数据库引用,用户数据库引用;
私人消防队;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_用户);
toolbar=findViewById(R.id.usersToolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“所有用户”);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mAuth=FirebaseAuth.getInstance();
UserDatabaseReference=FirebaseDatabase.getInstance().getReference().child(“用户”).child(mAuth.getCurrentUser().getUid());
databaseReference=FirebaseDatabase.getInstance().getReference().child(“用户”);
databaseReference.keepSynced(true);
recyclerView=findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(UsersActivity.this));
}
@凌驾
public void onStart(){
super.onStart();
惊人的倾听();
FirebaseUser currentUser=mAuth.getCurrentUser();
如果(currentUser!=null){
UserDatabaseReference.child(“在线”).setValue(“真”);
}
}
@凌驾
受保护的void onPause(){
super.onPause();
FirebaseUser currentUser=mAuth.getCurrentUser();
如果(currentUser!=null){
UserDatabaseReference.child(“Online”).setValue(ServerValue.TIMESTAMP);
}
}
公营机构{
Query Query=FirebaseDatabase.getInstance()
.getReference()
.child(“用户”)
.limitToLast(50);
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(查询,用户.class)
.build();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(选项){
@凌驾
受保护的无效onBindViewHolder(@NonNull UsersViewHolder holder,int position,@NonNull Users){
holder.setName(users.getName());
holder.setStatus(users.getStatus());
setThumbImage(users.getThumbImage());
最后一个字符串userID=getRef(position).getKey();
holder.mView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(UsersActivity.this、ProfileActivity.class);
intent.putExtra(“userID”,userID);
星触觉(意向);
}
});
}
@非空
@凌驾
public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.users\u single\u layout,parent,false);
返回新的UsersViewHolder(视图);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
公共静态类UsersViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共用户查看文件夹(查看项目视图){
超级(项目视图);
mView=项目视图;
}
公共void集合名(字符串名){
TextView用户名=mView.findviewbyd(R.id.userName);
userName.setText(name);
}
公共无效设置状态(字符串状态){
TextView userStatus=mView.findviewbyd(R.id.userStatus);
package com.jimmytrivedi.lapitchat;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnSuccessListener;
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.ServerValue;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class ProfileActivity extends AppCompatActivity {
private TextView profileDisplayName, currentStatus, totalFriends;
private ImageView profileDisplayImage;
private Button sendFriendRequest, declineFriendRequest;
private DatabaseReference databaseReference, FriendDatabaseReference, FriendDatabase,
RootDatabaseReference, UserDatabaseReference;
private ProgressDialog progressDialog;
private String current_state;
private FirebaseUser currentUser;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
final String userKey = getIntent().getStringExtra("userID");
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(userKey);
FriendDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Friend Request");
FriendDatabase = FirebaseDatabase.getInstance().getReference().child("Friends");
currentUser = FirebaseAuth.getInstance().getCurrentUser();
RootDatabaseReference = FirebaseDatabase.getInstance().getReference();
mAuth = FirebaseAuth.getInstance();
UserDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(mAuth.getCurrentUser().getUid());
profileDisplayName = findViewById(R.id.profileDisplayName);
currentStatus = findViewById(R.id.currentStatus);
totalFriends = findViewById(R.id.totalFriends);
profileDisplayImage = findViewById(R.id.profileDisplayImage);
sendFriendRequest = findViewById(R.id.sendFriendRequest);
declineFriendRequest = findViewById(R.id.declineFriendRequest);
declineFriendRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
current_state = "not_friends";
declineFriendRequest.setVisibility(View.INVISIBLE);
declineFriendRequest.setEnabled(false);
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Loading user data");
progressDialog.setMessage("Please wait while we load the user data");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String displayName = dataSnapshot.child("Name").getValue().toString();
String displayStatus = dataSnapshot.child("Status").getValue().toString();
String displayImage = dataSnapshot.child("Image").getValue().toString();
profileDisplayName.setText(displayName);
currentStatus.setText(displayStatus);
Picasso.get().load(displayImage).placeholder(R.drawable.defaultimage).into(profileDisplayImage);
// ------------FRIENDS LIST / REQUEST FEATURE-------------
FriendDatabaseReference.child(currentUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(userKey)) {
String req_type = dataSnapshot.child(userKey).child("Request Type")
.getValue().toString();
if (req_type.equals("receive")) {
current_state = "req_received";
sendFriendRequest.setText("Accept Friend Request");
declineFriendRequest.setVisibility(View.VISIBLE);
declineFriendRequest.setEnabled(true);
} else if (req_type.equals("sent")) {
current_state = "req_sent";
sendFriendRequest.setText("Cancel Friend Request");
declineFriendRequest.setVisibility(View.INVISIBLE);
declineFriendRequest.setEnabled(false);
}
progressDialog.dismiss();
} else {
FriendDatabase.child(currentUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(userKey)) {
current_state = "friends";
sendFriendRequest.setText("Unfriend this person");
declineFriendRequest.setVisibility(View.INVISIBLE);
declineFriendRequest.setEnabled(false);
}
progressDialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
progressDialog.dismiss();
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
sendFriendRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendFriendRequest.setEnabled(false);
// ------------NOT FRIENDS STATE-------------
if (current_state.equals("not_friends")) {
DatabaseReference NewNotificationDatabase = RootDatabaseReference.child("Notifications").child(userKey).push();
String newNotificationId = NewNotificationDatabase.getKey();
HashMap<String, String> notificationData = new HashMap<>();
notificationData.put("from", currentUser.getUid());
notificationData.put("type", "request");
Map requestMap = new HashMap();
requestMap.put("Friend Request/" + currentUser.getUid() + "/" + userKey + "/" + "Request Type", "sent");
requestMap.put("Friend Request/" + userKey + "/" + currentUser.getUid() + "/" + "Request Type", "receive");
requestMap.put("Notifications/" + userKey + "/" + newNotificationId, notificationData);
RootDatabaseReference.updateChildren(requestMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
if (databaseError != null) {
Toast.makeText(ProfileActivity.this, "There was some error in sending request", Toast.LENGTH_SHORT).show();
} else {
current_state = "req_sent";
sendFriendRequest.setText("Cancel Friend Request");
}
sendFriendRequest.setEnabled(true);
}
});
}
// ------------CANCEL REQUEST STATE-------------
if (current_state.equals("req_sent")) {
FriendDatabaseReference.child(currentUser.getUid()).child(userKey).removeValue()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
FriendDatabaseReference.child(userKey).child(currentUser.getUid())
.removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
sendFriendRequest.setEnabled(true);
current_state = "not_friends";
sendFriendRequest.setText("Send Friend Request");
declineFriendRequest.setVisibility(View.INVISIBLE);
declineFriendRequest.setEnabled(false);
}
});
}
});
}
// ------------REQUEST RECEIVED STATE-------------
if (current_state.equals("req_received")) {
final String currentDate = DateFormat.getDateTimeInstance().format(new Date());
Map friendsMap = new HashMap();
friendsMap.put("Friends/" + currentUser.getUid() + "/" + userKey + "/date", currentDate);
friendsMap.put("Friends/" + userKey + "/" + currentUser.getUid() + "/date", currentDate);
friendsMap.put("Friend Request/" + currentUser.getUid() + "/" + userKey, null);
friendsMap.put("Friend Request/" + userKey + "/" + currentUser.getUid(), null);
RootDatabaseReference.updateChildren(friendsMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError == null) {
sendFriendRequest.setEnabled(true);
current_state = "friends";
sendFriendRequest.setText("Unfriend this Person");
declineFriendRequest.setVisibility(View.INVISIBLE);
declineFriendRequest.setEnabled(false);
} else {
String error = databaseError.getMessage();
Toast.makeText(ProfileActivity.this, error, Toast.LENGTH_SHORT).show();
}
}
});
}
// ------------UNFRIEND STATE-------------
if (current_state.equals("friends")) {
Map unfriendMap = new HashMap();
unfriendMap.put("Friends/" + currentUser.getUid() + "/" + userKey, null);
unfriendMap.put("Friends/" + userKey + "/" + currentUser.getUid(), null);
RootDatabaseReference.updateChildren(unfriendMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError == null) {
current_state = "not_friends";
sendFriendRequest.setText("Send Friend Request");
declineFriendRequest.setVisibility(View.INVISIBLE);
declineFriendRequest.setEnabled(false);
} else {
String error = databaseError.getMessage();
Toast.makeText(ProfileActivity.this, error, Toast.LENGTH_SHORT).show();
}
sendFriendRequest.setEnabled(true);
}
});
}
}
});
}
@Override
public void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
UserDatabaseReference.child("Online").setValue("true");
}
}
@Override
protected void onPause() {
super.onPause();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
UserDatabaseReference.child("Online").setValue(ServerValue.TIMESTAMP);
}
}
}
sendFriendRequest.setVisibility(View.GONE);
sendFriendRequest.setEnabled(false);