i want to build a Presense System with firebase but when i click join in toolbar, the app was forced stop.
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.app.PresenseSystem.User
ListUsersActivity
public class ListUsersActivity extends AppCompatActivity {
DatabaseReference onlineRef, currentUserRef, counterRef;
private FirebaseFirestore firebaseFirestore;
FirebaseRecyclerAdapter<User, ListViewHolder> adapter;
RecyclerView ListOnline;
RecyclerView.LayoutManager layoutManager;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_users);
ListOnline = (RecyclerView) findViewById(R.id.online_list);
ListOnline.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
ListOnline.setLayoutManager(layoutManager);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("User lists");
setSupportActionBar(toolbar);
onlineRef = FirebaseDatabase.getInstance().getReference().child(".info/connected");
counterRef = FirebaseDatabase.getInstance().getReference("lastOnline");
currentUserRef = FirebaseDatabase.getInstance().getReference("lastOnline").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
Query QueryRef = counterRef.orderByKey();
setupSystem();
FirebaseRecyclerOptions Options = new FirebaseRecyclerOptions.Builder<User>().setQuery(QueryRef, User.class).build();
adapter = new FirebaseRecyclerAdapter<User, ListViewHolder>(Options) {
@Override
protected void onBindViewHolder(ListViewHolder holder, final int position, final User model) {
holder.setName(model.getEmail());
}
@Override
public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.user_lists, parent, false);
return new ListViewHolder(view);
}
};
adapter.notifyDataSetChanged();
ListOnline.setAdapter(adapter);
}
private void setupSystem() {
onlineRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue(Boolean.class)) {
currentUserRef.onDisconnect().removeValue();
counterRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(new User(FirebaseAuth.getInstance().getCurrentUser().getEmail(), "Online"));
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
counterRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
User user= postSnapshot.getValue(User.class);
Log.d("LOG",""+user.getEmail()+"is"+user.getStatus());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_join:
counterRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(FirebaseAuth.getInstance().getCurrentUser().getEmail(),"Online");
break;
case R.id.action_logout:
currentUserRef.removeValue();
}
return super.onOptionsItemSelected(item);
}
User
public class User {
public String name;
public String image;
public String email;
public String status;
public String userId;
public User(String email, String online) {
}
public User(String name, String image, String status, String email,String userid) {
this.name = name;
this.image = image;
this.status = status;
this.email= email;
this.userId=userid;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getEmail() {
return email;
}
public String getStatus() {
return status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}}
ListViewHolder
public class ListViewHolder extends RecyclerView.ViewHolder {
private TextView UserName;
View mView;
public ListViewHolder(View itemView){
super(itemView);
mView = itemView;
}
public void setName(String Name){
TextView email = (TextView)mView.findViewById(R.id.text_email);
email.setText(Name);
}}