i have a problem in my MainActivity.java code, where i display all users posts, the problem is in my onStart() method, when i put FirebaseRecyclerAdapter in my onStart() method, onStart() won't call CheckUserExistence() method which is in the OnStart() method, which leads user to SetUpActivity.java, and as soon as i remove FirebaseRecyclerAdapter it works fine, means it calls CheckUserExistence() method and goes to SetupActivity perfectly, what is wrong, i can't figure out, please help -
Here's the specific part of code in MainActivity.java where i have problem -
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null) {
SendUserToLoginActivity();
} else {
CheckUserExistence();
}
Query SortPostsInDescendingOrder = PostsRef.orderByChild("counter");
FirebaseRecyclerOptions<Posts> options = new FirebaseRecyclerOptions.Builder<Posts>().setQuery(SortPostsInDescendingOrder, Posts.class).build();
FirebaseRecyclerAdapter<Posts, PostsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Posts, PostsViewHolder>
(options) {
@Override
protected void onBindViewHolder(@NonNull PostsViewHolder postsViewHolder, int i, @NonNull Posts posts) {
final String PostKey = getRef(i).getKey();
postsViewHolder.username.setText(posts.getFullname());
postsViewHolder.PostTime.setText(posts.getTime());
postsViewHolder.PostDate.setText(posts.getDate());
postsViewHolder.PostDescription.setText(posts.getDescription());
Picasso.get().load(posts.getProfileimage()).into(postsViewHolder.image);
Picasso.get().load(posts.getPostimage()).into(postsViewHolder.Postimage);
postsViewHolder.setLikeButtonStatus(PostKey);
postsViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent clickPostIntent = new Intent(MainActivity.this, ClickPostActivity.class);
clickPostIntent.putExtra("PostKey", PostKey);
startActivity(clickPostIntent);
}
});
postsViewHolder.LikePostButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LikeChecker = true;
LikesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(LikeChecker.equals(true))
{
if(snapshot.child(PostKey).hasChild(currentUserID))
{
LikesRef.child(PostKey).child(currentUserID).removeValue();
LikeChecker = false;
}
else
{
LikesRef.child(PostKey).child(currentUserID).setValue(true);
LikeChecker = false;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
}
@NonNull
@Override
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.all_posts_layout, parent, false);
PostsViewHolder viewHolder = new PostsViewHolder(view);
return viewHolder;
}
};
postList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
updateUserStatus("online");
}
private void CheckUserExistence() {
final String current_user_id = mAuth.getCurrentUser().getUid();
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (!snapshot.hasChild(current_user_id)) {
SendUserToSetupActivity();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
private void SendUserToSetupActivity() {
Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
setupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(setupIntent);
finish();
}
I removed FirebaseRecyclerAdapter from my onStart() method and it was working fine, which means it was leading users to SetupActivity.java, as intended code, i also tried extending MainActivity. java and made another activity just to display posts so that onStart won't conflict but that was completely wrong as my app wasn't even starting up.
When i remove FirebaseRecyclerAdapter from my onStart method, onStart() method works fine, which means it leads user to SetupActivity.java as intended code -
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null) {
SendUserToLoginActivity();
} else {
CheckUserExistence();
}
}
private void CheckUserExistence() {
final String current_user_id = mAuth.getCurrentUser().getUid();
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(current_user_id)) {
SendUserToSetupActivity();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
But when i add FirebaseRecyclerAdapter in my onStart() method it doesn't work as intended means it doesn't got to SetupActivity.java -
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null) {
SendUserToLoginActivity();
} else {
CheckUserExistence();
}
Query SortPostsInDescendingOrder = PostsRef.orderByChild("counter");
FirebaseRecyclerOptions<Posts> options = new FirebaseRecyclerOptions.Builder<Posts>().setQuery(SortPostsInDescendingOrder, Posts.class).build();
FirebaseRecyclerAdapter<Posts, PostsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Posts, PostsViewHolder>
(options) {
@Override
protected void onBindViewHolder(@NonNull PostsViewHolder postsViewHolder, int i, @NonNull Posts posts) {
final String PostKey = getRef(i).getKey();
postsViewHolder.username.setText(posts.getFullname());
postsViewHolder.PostTime.setText(posts.getTime());
postsViewHolder.PostDate.setText(posts.getDate());
postsViewHolder.PostDescription.setText(posts.getDescription());
Picasso.get().load(posts.getProfileimage()).into(postsViewHolder.image);
Picasso.get().load(posts.getPostimage()).into(postsViewHolder.Postimage);
postsViewHolder.setLikeButtonStatus(PostKey);
postsViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent clickPostIntent = new Intent(MainActivity.this, ClickPostActivity.class);
clickPostIntent.putExtra("PostKey", PostKey);
startActivity(clickPostIntent);
}
});
postsViewHolder.LikePostButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LikeChecker = true;
LikesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(LikeChecker.equals(true))
{
if(snapshot.child(PostKey).hasChild(currentUserID))
{
LikesRef.child(PostKey).child(currentUserID).removeValue();
LikeChecker = false;
}
else
{
LikesRef.child(PostKey).child(currentUserID).setValue(true);
LikeChecker = false;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
}
@NonNull
@Override
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.all_posts_layout, parent, false);
PostsViewHolder viewHolder = new PostsViewHolder(view);
return viewHolder;
}
};
postList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
updateUserStatus("online");
}
private void CheckUserExistence() {
final String current_user_id = mAuth.getCurrentUser().getUid();
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (!snapshot.hasChild(current_user_id)) {
SendUserToSetupActivity();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
Please Help. Please tell me in detail where i am going wrong with my code with appropriate code improvements and implementation in details.
I’ve solved the error, what I was looking for to send user to SetupActivity from Mainactivity, but then i decided I can send users directly from LoginActivity to SetupActivity, No need to use sophisticated practices where common sense can be used.