Firebase数据库异常:Can';t将java.lang.String类型的对象转换为
在我的LapitChat应用程序中获取此错误。我无法解决这个问题,我试图找出许多解决方法,但我无法解决这个问题。我用model和db image添加了我的类代码 我的火基结构是 单击好友片段时出现错误Firebase数据库异常:Can';t将java.lang.String类型的对象转换为,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,在我的LapitChat应用程序中获取此错误。我无法解决这个问题,我试图找出许多解决方法,但我无法解决这个问题。我用model和db image添加了我的类代码 我的火基结构是 单击好友片段时出现错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.divyanshi.chatapp, PID: 29577 com.google.firebase.database.DatabaseException: Can't con
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.divyanshi.chatapp, PID: 29577
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.divyanshi.chatapp.model.Friends
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:29)
at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:15)
at com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot(BaseCachingSnapshotParser.java:36)
at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:109)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:149)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1897)
at androidx.recyclerview.widget.RecyclerView$1.run(RecyclerView.java:414)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:693)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I/Process: Sending signal. PID: 29577 SIG: 9
FriendsFragment.java
package com.divyanshi.chatapp.fragment;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.divyanshi.chatapp.R;
import com.divyanshi.chatapp.model.Friends;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
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.squareup.picasso.Picasso;
import de.hdodenhof.circleimageview.CircleImageView;
public class FriendsFragment extends Fragment {
private RecyclerView mFriendList;
private FirebaseAuth mAuth;
private DatabaseReference mFriendDatabase;
private DatabaseReference mUserDatabase;
String mCurrent_user_id;
private View mMainView;
public FriendsFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mMainView = inflater.inflate(R.layout.friends_fragment, container, false);
mFriendList = mMainView.findViewById(R.id.friends_list);
mAuth = FirebaseAuth.getInstance();
mCurrent_user_id = mAuth.getCurrentUser().getUid();
mFriendDatabase = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("users");
mFriendList.setHasFixedSize(true);
mFriendList.setLayoutManager(new LinearLayoutManager(getContext()));
return mMainView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions<Friends> friendsFirebaseRecyclerOptions =
new FirebaseRecyclerOptions.Builder<Friends>()
.setQuery(mFriendDatabase, Friends.class)
.build();
FirebaseRecyclerAdapter<Friends, FriendsViewHolder> adapter = new FirebaseRecyclerAdapter
<Friends, FriendsFragment.FriendsViewHolder>(friendsFirebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(final FriendsViewHolder holder, int position, @NonNull Friends model) {
String list_user_id = getRef(position).getKey();
mUserDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String username = dataSnapshot.child("name").getValue().toString();
String status = dataSnapshot.child("status").getValue().toString();
String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();
holder.tv_usersSingle_username.setText(username);
holder.tv_usersSingle_status.setText(status);
if (!thumb_image.equals("default")) {
Picasso.with(getContext()).load(thumb_image).placeholder(R.mipmap.ic_launcher_round).into(holder.iv_usersSingle_image);
}
Log.d("Special", "I am log name" );
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public FriendsFragment.FriendsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.users_single_layout, parent, false);
return new FriendsViewHolder(view);
}
};
mFriendList.setAdapter(adapter);
adapter.startListening();
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder {
private TextView tv_usersSingle_username, tv_usersSingle_status;
private CircleImageView iv_usersSingle_image;
public FriendsViewHolder(@NonNull View itemView) {
super(itemView);
tv_usersSingle_username = itemView.findViewById(R.id.user_single_name);
tv_usersSingle_status = itemView.findViewById(R.id.user_single_status);
iv_usersSingle_image = itemView.findViewById(R.id.user_single_image);
}
}
}
ProfileActivity.java
package com.divyanshi.chatapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import java.text.DateFormat;
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.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
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.squareup.picasso.Picasso;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class ProfileActivity extends AppCompatActivity {
private ImageView mProfileImage;
private TextView mProfileName, mProfileStatus, mProfileFriendsCount;
private Button mProfileSendReqBtn, nDeclineBtn;
private DatabaseReference mUserDatabase;
private ProgressDialog mProgressDialog;
private DatabaseReference mFriendReqDatabase;
private DatabaseReference mFriendsDatabase;
private DatabaseReference mNotificationDatabase;
private DatabaseReference mRootRef;
private FirebaseUser mCurrent_user;
private String mCurrent_State;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
final String user_id = getIntent().getStringExtra("user_id");
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("users").child(user_id);
mFriendReqDatabase = FirebaseDatabase.getInstance().getReference().child("Friend_req");
mNotificationDatabase = FirebaseDatabase.getInstance().getReference().child("notification");
mCurrent_user = FirebaseAuth.getInstance().getCurrentUser();
mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("Friends");
mRootRef=FirebaseDatabase.getInstance().getReference();
mProfileImage = (ImageView) findViewById(R.id.profile_image);
mProfileName = (TextView) findViewById(R.id.profile_display_name);
mProfileStatus = (TextView) findViewById(R.id.profile_status);
mProfileFriendsCount = (TextView) findViewById(R.id.Profile_totalFrnds);
mProfileSendReqBtn = (Button) findViewById(R.id.profile_SendReq);
nDeclineBtn = (Button) findViewById(R.id.profile_Decline_reqBtn);
mCurrent_State = "not_friends";
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setTitle("Loading UserData");
mProgressDialog.setMessage("Please wait while we load the data.");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String display_name = snapshot.child("name").getValue().toString();
String status = snapshot.child("status").getValue().toString();
String image = snapshot.child("image").getValue().toString();
mProfileName.setText(display_name);
mProfileStatus.setText(status);
Picasso.with(ProfileActivity.this).load(image).placeholder(R.drawable.default_avatar).into(mProfileImage);
//-------FRIEND LIST /REQUEST FEATURE--------//
mFriendReqDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.hasChild(user_id)) {
String req_type = snapshot.child(user_id).child("request_type").getValue().toString();
if (req_type.equals("received")) {
mCurrent_State = "req_received";
mProfileSendReqBtn.setText("Accept Friend Request");
nDeclineBtn.setVisibility(View.VISIBLE);
nDeclineBtn.setEnabled(true);
} else if (req_type.equals("sent")) {
mCurrent_State = "Req_sent";
mProfileSendReqBtn.setText("Cancel Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
mProgressDialog.dismiss();
} else {
mFriendsDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.hasChild(user_id)) {
mCurrent_State = "friends";
mProfileSendReqBtn.setText("Unfriend this Person");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
mProgressDialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
mProfileSendReqBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mProfileSendReqBtn.setEnabled(false);
// NOT FRIEND STATE//
if (mCurrent_State.equals("not_friends")) {
mFriendReqDatabase.child(mCurrent_user.getUid()).child(user_id).child("request_type").setValue("sent").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mFriendReqDatabase.child(user_id).child(mCurrent_user.getUid()).child("request_type").setValue("received").addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
HashMap<String, String> notificationData = new HashMap<>();
notificationData.put("from", mCurrent_user.getUid());
notificationData.put("type", "request");
mNotificationDatabase.child(user_id).push().setValue(notificationData).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mCurrent_State = "Req_sent";
mProfileSendReqBtn.setText("Cancel Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
});
// Toast.makeText(ProfileActivity.this, "Request Sent Successfully.", Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(ProfileActivity.this, "Failed to send the Request, Please try again.", Toast.LENGTH_SHORT).show();
}
mProfileSendReqBtn.setEnabled(true);
}
});
}
// Cancel the request //
if (mCurrent_State.equals("Req_sent")) {
mFriendReqDatabase.child(mCurrent_user.getUid()).child(user_id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mFriendReqDatabase.child(user_id).child(mCurrent_user.getUid()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mProfileSendReqBtn.setEnabled(true);
mCurrent_State = "not_friends";
mProfileSendReqBtn.setText("Send Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
});
}
});
}
if (mCurrent_State.equals("req_received")){
final String currentDate=DateFormat.getDateTimeInstance().format(new Date());
Map friendMap = new HashMap();
friendMap.put("Friends/"+mCurrent_user.getUid()+"/"+user_id+"/date",currentDate);
friendMap.put("Friends/"+user_id+"/"+mCurrent_user.getUid()+"/date",currentDate);
friendMap.put("Friend_req/"+mCurrent_user.getUid()+"/"+user_id,null);
friendMap.put("Friend_req/"+user_id+"/"+mCurrent_user.getUid(),null);
mRootRef.updateChildren(friendMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
mProfileSendReqBtn.setEnabled(true);
mCurrent_State = "friends";
mProfileSendReqBtn.setText("UnFriend this person");
}
});
}
}
});
}
}
package com.divyanshi.chatapp;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.appcompat.app.appcompat活动;
导入android.app.ProgressDialog;
导入android.os.Bundle;
导入java.text.DateFormat;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.OnSuccessListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入com.squareup.picasso.picasso;
导入java.util.Date;
导入java.util.HashMap;
导入java.util.Map;
公共类ProfileActivity扩展了AppCompatActivity{
私有图像查看mProfileImage;
私有文本查看mProfileName、mProfileStatus、mProfileFriendsCount;
专用按钮mProfileSendReqBtn,nDeclineBtn;
私人数据库参考博物馆数据库;
private ProgressDialog mProgressDialog;
私有数据库参考mFriendReqDatabase;
私有数据库参考mFriendsDatabase;
私有数据库参考通知数据库;
私有数据库参考mRootRef;
私有FirebaseUser MCU用户;
私有字符串MCU状态;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
最终字符串user_id=getIntent().getStringExtra(“user_id”);
mUserDatabase=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户id);
mFriendReqDatabase=FirebaseDatabase.getInstance().getReference().child(“Friend_req”);
mNotificationDatabase=FirebaseDatabase.getInstance().getReference().child(“通知”);
mCurrent_user=FirebaseAuth.getInstance().getCurrentUser();
mfriendsddatabase=FirebaseDatabase.getInstance().getReference().child(“朋友”);
mRootRef=FirebaseDatabase.getInstance().getReference();
mProfileImage=(ImageView)findViewById(R.id.profile\u图像);
mProfileName=(TextView)findViewById(R.id.profile\u display\u name);
mProfileStatus=(TextView)findViewById(R.id.profile\u status);
mProfileFriendsCount=(TextView)findViewById(R.id.Profile_totalFrnds);
mProfileSendReqBtn=(按钮)findViewById(R.id.profile\u SendReq);
nDeclineBtn=(按钮)findViewById(R.id.profile\u Decline\u reqBtn);
mccurrent_State=“不是朋友”;
mProgressDialog=新建进度对话框(此);
setTitle(“加载用户数据”);
setMessage(“请稍候,我们正在加载数据。”);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
mUserDatabase.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
字符串display_name=snapshot.child(“name”).getValue().toString();
字符串状态=snapshot.child(“status”).getValue().toString();
字符串image=snapshot.child(“image”).getValue().toString();
mProfileName.setText(显示名称);
mProfileStatus.setText(状态);
毕加索.with(ProfileActivity.this).load(image).placeholder(R.drawable.default_avatar).into(mProfileImage);
//-------好友列表/请求功能--------//
mFriendReqDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
if(snapshot.hasChild(用户id)){
String req_type=snapshot.child(用户id).child(“请求类型”).getValue().toString();
如果(请求类型等于(“接收”)){
mCurrent_State=“收到请求”;
mProfileSendReqBtn.setText(“接受好友请求”);
nDeclineBtn.setVisibility(视图可见);
nDeclineBtn.setEnabled(真);
}else if(请求类型等于(“已发送”){
mcCurrent_State=“请求已发送”;
mProfileSendReqBtn.setText(“取消好友请求”);
nDeclineBtn.setVisibility(视图不可见);
nDeclineBtn.setEnabled(假);
}
mProgressDialog.disclose();
}否则{
mFriendsDatabase.child(mcCurrent_user.getUid()).addListenerForSingleValueEvent(新值EventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
if(snapshot.hasChild(用户id)){
mCurrent_State=“朋友”;
mProfileSendReqBtn.setText(“解除此人的朋友关系”);
非临床
package com.divyanshi.chatapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import java.text.DateFormat;
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.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
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.squareup.picasso.Picasso;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class ProfileActivity extends AppCompatActivity {
private ImageView mProfileImage;
private TextView mProfileName, mProfileStatus, mProfileFriendsCount;
private Button mProfileSendReqBtn, nDeclineBtn;
private DatabaseReference mUserDatabase;
private ProgressDialog mProgressDialog;
private DatabaseReference mFriendReqDatabase;
private DatabaseReference mFriendsDatabase;
private DatabaseReference mNotificationDatabase;
private DatabaseReference mRootRef;
private FirebaseUser mCurrent_user;
private String mCurrent_State;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
final String user_id = getIntent().getStringExtra("user_id");
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("users").child(user_id);
mFriendReqDatabase = FirebaseDatabase.getInstance().getReference().child("Friend_req");
mNotificationDatabase = FirebaseDatabase.getInstance().getReference().child("notification");
mCurrent_user = FirebaseAuth.getInstance().getCurrentUser();
mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("Friends");
mRootRef=FirebaseDatabase.getInstance().getReference();
mProfileImage = (ImageView) findViewById(R.id.profile_image);
mProfileName = (TextView) findViewById(R.id.profile_display_name);
mProfileStatus = (TextView) findViewById(R.id.profile_status);
mProfileFriendsCount = (TextView) findViewById(R.id.Profile_totalFrnds);
mProfileSendReqBtn = (Button) findViewById(R.id.profile_SendReq);
nDeclineBtn = (Button) findViewById(R.id.profile_Decline_reqBtn);
mCurrent_State = "not_friends";
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setTitle("Loading UserData");
mProgressDialog.setMessage("Please wait while we load the data.");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String display_name = snapshot.child("name").getValue().toString();
String status = snapshot.child("status").getValue().toString();
String image = snapshot.child("image").getValue().toString();
mProfileName.setText(display_name);
mProfileStatus.setText(status);
Picasso.with(ProfileActivity.this).load(image).placeholder(R.drawable.default_avatar).into(mProfileImage);
//-------FRIEND LIST /REQUEST FEATURE--------//
mFriendReqDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.hasChild(user_id)) {
String req_type = snapshot.child(user_id).child("request_type").getValue().toString();
if (req_type.equals("received")) {
mCurrent_State = "req_received";
mProfileSendReqBtn.setText("Accept Friend Request");
nDeclineBtn.setVisibility(View.VISIBLE);
nDeclineBtn.setEnabled(true);
} else if (req_type.equals("sent")) {
mCurrent_State = "Req_sent";
mProfileSendReqBtn.setText("Cancel Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
mProgressDialog.dismiss();
} else {
mFriendsDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.hasChild(user_id)) {
mCurrent_State = "friends";
mProfileSendReqBtn.setText("Unfriend this Person");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
mProgressDialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
mProfileSendReqBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mProfileSendReqBtn.setEnabled(false);
// NOT FRIEND STATE//
if (mCurrent_State.equals("not_friends")) {
mFriendReqDatabase.child(mCurrent_user.getUid()).child(user_id).child("request_type").setValue("sent").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mFriendReqDatabase.child(user_id).child(mCurrent_user.getUid()).child("request_type").setValue("received").addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
HashMap<String, String> notificationData = new HashMap<>();
notificationData.put("from", mCurrent_user.getUid());
notificationData.put("type", "request");
mNotificationDatabase.child(user_id).push().setValue(notificationData).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mCurrent_State = "Req_sent";
mProfileSendReqBtn.setText("Cancel Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
});
// Toast.makeText(ProfileActivity.this, "Request Sent Successfully.", Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(ProfileActivity.this, "Failed to send the Request, Please try again.", Toast.LENGTH_SHORT).show();
}
mProfileSendReqBtn.setEnabled(true);
}
});
}
// Cancel the request //
if (mCurrent_State.equals("Req_sent")) {
mFriendReqDatabase.child(mCurrent_user.getUid()).child(user_id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mFriendReqDatabase.child(user_id).child(mCurrent_user.getUid()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mProfileSendReqBtn.setEnabled(true);
mCurrent_State = "not_friends";
mProfileSendReqBtn.setText("Send Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
});
}
});
}
if (mCurrent_State.equals("req_received")){
final String currentDate=DateFormat.getDateTimeInstance().format(new Date());
Map friendMap = new HashMap();
friendMap.put("Friends/"+mCurrent_user.getUid()+"/"+user_id+"/date",currentDate);
friendMap.put("Friends/"+user_id+"/"+mCurrent_user.getUid()+"/date",currentDate);
friendMap.put("Friend_req/"+mCurrent_user.getUid()+"/"+user_id,null);
friendMap.put("Friend_req/"+user_id+"/"+mCurrent_user.getUid(),null);
mRootRef.updateChildren(friendMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
mProfileSendReqBtn.setEnabled(true);
mCurrent_State = "friends";
mProfileSendReqBtn.setText("UnFriend this person");
}
});
}
}
});
}
}
com.google.firebase.database.DatabaseException: Can't convert object of
type java.lang.String to type com.divyanshi.chatapp.model.Friends
String username = dataSnapshot.child("name").getValue().toString();
String status = dataSnapshot.child("status").getValue().toString();
String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();
@Override
protected void onBindViewHolder(final FriendsViewHolder holder, int position, @NonNull Friends model) {
String list_user_id = getRef(position).getKey();
mUserDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Friends friend = singleSnapshot.getValue(Friends.class);
String username = friend.getName();
String status = friend.getStatus();
String thumb_image = friend.getImage();
holder.tv_usersSingle_username.setText(username);
holder.tv_usersSingle_status.setText(status);
if (!thumb_image.equals("default")) {
Picasso.with(getContext()).load(thumb_image).placeholder(R.mipmap.ic_launcher_round).into(holder.iv_usersSingle_image);
}
Log.d("Special", "I am log name" );
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
mFriendDatabase = FirebaseDatabase.getInstance().getReference().child("Friends").child(mCurrent_user_id);
mFriendDatabase = FirebaseDatabase.getInstance().getReference("/Friends");
FirebaseRecyclerOptions<Friends> friendsFirebaseRecyclerOptions =
new FirebaseRecyclerOptions.Builder<Friends>()
.setIndexedQuery(mFriendDatabase, mUserDatabase, Friends.class)
.build();
package com.divyanshi.chatapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import java.text.DateFormat;
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.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
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.squareup.picasso.Picasso;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class ProfileActivity extends AppCompatActivity {
private ImageView mProfileImage;
private TextView mProfileName, mProfileStatus, mProfileFriendsCount;
private Button mProfileSendReqBtn, nDeclineBtn;
private DatabaseReference mUserDatabase;
private ProgressDialog mProgressDialog;
private DatabaseReference mFriendReqDatabase;
private DatabaseReference mFriendsDatabase;
private DatabaseReference mNotificationDatabase;
private DatabaseReference mRootRef;
private FirebaseUser mCurrent_user;
private String mCurrent_State;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
final String user_id = getIntent().getStringExtra("user_id");
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("users").child(user_id);
mFriendReqDatabase = FirebaseDatabase.getInstance().getReference().child("Friend_req");
mNotificationDatabase = FirebaseDatabase.getInstance().getReference().child("notification");
mCurrent_user = FirebaseAuth.getInstance().getCurrentUser();
mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("Friends");
mRootRef = FirebaseDatabase.getInstance().getReference();
mProfileImage = (ImageView) findViewById(R.id.profile_image);
mProfileName = (TextView) findViewById(R.id.profile_display_name);
mProfileStatus = (TextView) findViewById(R.id.profile_status);
mProfileFriendsCount = (TextView) findViewById(R.id.Profile_totalFrnds);
mProfileSendReqBtn = (Button) findViewById(R.id.profile_SendReq);
nDeclineBtn = (Button) findViewById(R.id.profile_Decline_reqBtn);
mCurrent_State = "not_friends";
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setTitle("Loading UserData");
mProgressDialog.setMessage("Please wait while we load the data.");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String display_name = snapshot.child("name").getValue().toString();
String status = snapshot.child("status").getValue().toString();
String image = snapshot.child("image").getValue().toString();
mProfileName.setText(display_name);
mProfileStatus.setText(status);
Picasso.with(ProfileActivity.this).load(image).placeholder(R.drawable.default_avatar).into(mProfileImage);
//-------FRIEND LIST /REQUEST FEATURE--------//
mFriendReqDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.hasChild(user_id)) {
String req_type = snapshot.child(user_id).child("request_type").getValue().toString();
if (req_type.equals("received")) {
mCurrent_State = "req_received";
mProfileSendReqBtn.setText("Accept Friend Request");
nDeclineBtn.setVisibility(View.VISIBLE);
nDeclineBtn.setEnabled(true);
} else if (req_type.equals("sent")) {
mCurrent_State = "Req_sent";
mProfileSendReqBtn.setText("Cancel Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
mProgressDialog.dismiss();
} else {
mFriendsDatabase.child(mCurrent_user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.hasChild(user_id)) {
mCurrent_State = "friends";
mProfileSendReqBtn.setText("Unfriend this Person");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
mProgressDialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
mProfileSendReqBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mProfileSendReqBtn.setEnabled(false);
// NOT FRIEND STATE//
if (mCurrent_State.equals("not_friends")) {
mFriendReqDatabase.child(mCurrent_user.getUid()).child(user_id).child("request_type").setValue("sent").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mFriendReqDatabase.child(user_id).child(mCurrent_user.getUid()).child("request_type").setValue("received").addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
HashMap<String, String> notificationData = new HashMap<>();
notificationData.put("from", mCurrent_user.getUid());
notificationData.put("type", "request");
mNotificationDatabase.child(user_id).push().setValue(notificationData).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mCurrent_State = "Req_sent";
mProfileSendReqBtn.setText("Cancel Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
});
}
});
} else {
Toast.makeText(ProfileActivity.this, "Failed to send the Request, Please try again.", Toast.LENGTH_SHORT).show();
}
mProfileSendReqBtn.setEnabled(true);
}
});
}
// Cancel the request //
if (mCurrent_State.equals("Req_sent")) {
mFriendReqDatabase.child(mCurrent_user.getUid()).child(user_id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mFriendReqDatabase.child(user_id).child(mCurrent_user.getUid()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mProfileSendReqBtn.setEnabled(true);
mCurrent_State = "not_friends";
mProfileSendReqBtn.setText("Send Friend Request");
nDeclineBtn.setVisibility(View.INVISIBLE);
nDeclineBtn.setEnabled(false);
}
});
}
});
}
if (mCurrent_State.equals("req_received")) {
final String currentDate = DateFormat.getDateTimeInstance().format(new Date());
Map friendMap = new HashMap();
friendMap.put("Friends/" + mCurrent_user.getUid() + "/" + user_id + "/date", currentDate);
friendMap.put("Friends/" + user_id + "/" + mCurrent_user.getUid() + "/date", currentDate);
friendMap.put("Friend_req/" + mCurrent_user.getUid() + "/" + user_id, null);
friendMap.put("Friend_req/" + user_id + "/" + mCurrent_user.getUid(), null);
mRootRef.updateChildren(friendMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError error, @NonNull DatabaseReference ref) {
mProfileSendReqBtn.setEnabled(true);
mCurrent_State = "friends";
mProfileSendReqBtn.setText("UnFriend this person");
}
});
}
}
});
}
}