Failed to send user to Login Activity when no CurrentUser detect [duplicate]
This question already has an answer here:
What is a NullPointerException, and how do I fix it?
12 answers
i just have problem when i trying to logout from my app and close it and i open it again. The app was crashed there and i think that because onStart on my MainActivity.class not working , i spend lot of times to solve this but i can't , i need help so much.
This is the error
12-27 19:32:01.753 27788-27788/com.suryaaditya.dissent E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.suryaaditya.dissent, PID: 27788
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
at com.suryaaditya.dissent.FriendsFragment.onCreateView(FriendsFragment.java:60)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.suryaaditya.dissent.MainActivity.onStart(MainActivity.java:113)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1392)
at android.app.Activity.performStart(Activity.java:7157)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2940)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1811)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6694)
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)
And this MainActivity
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ViewPager myViewPager;
private TabLayout myTabLayout;
private TabsAccessorAdapter myTabsAccessorAdapter;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
private String currentUserID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
RootRef = FirebaseDatabase.getInstance().getReference();
mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("Dissent");
BottomNavigationView navigationView= findViewById(R.id.bottom_navigation);
final ChatsFragment chatsFragment = new ChatsFragment();
final NotificationsFragment notificationsFragment = new NotificationsFragment();
final FriendsFragment friendsFragment = new FriendsFragment();
final GroupsFragment groupsFragment = new GroupsFragment();
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.navigation_friends){
setFragment(friendsFragment);
return true;
}
else if(id == R.id.navigation_group){
setFragment(groupsFragment);
return true;
}
else if (id == R.id.navigation_chats){
setFragment(chatsFragment);
return true;
}
else if(id == R.id.navigation_notif){
setFragment(notificationsFragment);
return true;
}
return false;
}
});
navigationView.setSelectedItemId(R.id.navigation_friends);
}
private void setFragment(Fragment fragment){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();
}
@Override
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null){
SendUserToLoginActivity();
}
else{
updateUserStatus("online");
VerifyUserExistence();
}
}
@Override
protected void onStop() {
super.onStop();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
private void VerifyUserExistence() {
String currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if ((dataSnapshot.child("name").exists())){
}
else {
SendUserToSettingsActivity();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void SendUserToLoginActivity() {
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginIntent);
}
private void SendUserToFindFriendsActivity() {
Intent findFriendsIntent = new Intent(MainActivity.this , FindFriendsActivity.class);
startActivity(findFriendsIntent);
}
private void SendUserToSettingsActivity() {
Intent settingsIntent = new Intent(MainActivity.this , SettingsActivity.class);
startActivity(settingsIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.option_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.main_logout_option){
updateUserStatus("offline");
mAuth.signOut();
SendUserToLoginActivity();
}
if (item.getItemId() == R.id.main_settings_option){
SendUserToSettingsActivity();
}
if (item.getItemId() == R.id.main_create_group_option){
RequestNewGroup();
}
if (item.getItemId() == R.id.main_find_friends_option){
SendUserToFindFriendsActivity();
}
return true;
}
private void RequestNewGroup() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialog);
builder.setTitle("Enter Group Name : ");
final EditText groupNameField = new EditText(MainActivity.this);
groupNameField.setHint("e.g Dissent");
builder.setView(groupNameField);
builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String groupName = groupNameField.getText().toString();
if (TextUtils.isEmpty(groupName)){
Toast.makeText(MainActivity.this, "Please enter Group Name !" , Toast.LENGTH_SHORT).show();
}
else {
CreateNewGroup(groupName);
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
private void CreateNewGroup(final String groupName) {
RootRef.child("Groups").child(groupName).setValue("")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivity.this, groupName + " is Created Successfully !", Toast.LENGTH_SHORT).show();
}
}
});
}
private void updateUserStatus(String state){
String saveCurrentTime, saveCurrentDate;
Calendar calendar = Calendar.getInstance();
SimpleDateFormat currentTime = new SimpleDateFormat("hh:mm a");
saveCurrentTime = currentTime.format(calendar.getTime());
SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy");
saveCurrentDate = currentDate.format(calendar.getTime());
HashMap<String , Object> onlineStateMap = new HashMap<>();
onlineStateMap.put("time", saveCurrentTime);
onlineStateMap.put("date", saveCurrentDate);
onlineStateMap.put("state", state);
currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).child("userState")
.updateChildren(onlineStateMap);
}
}
This is FriendsFragment
public class FriendsFragment extends Fragment {
private View FriendsView;
private RecyclerView friendsList ;
private DatabaseReference friendsRef, usersRef ;
private FirebaseAuth mAuth;
private String currentUserID;
public FriendsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FriendsView = inflater.inflate(R.layout.fragment_friends, container, false);
friendsList = (RecyclerView) FriendsView.findViewById(R.id.friends_list);
friendsList.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
friendsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
return FriendsView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(friendsRef, Contacts.class)
.build();
FirebaseRecyclerAdapter<Contacts, FriendsViewHolder> adapter =
new FirebaseRecyclerAdapter<Contacts, FriendsViewHolder>(options)
{
@Override
protected void onBindViewHolder(@NonNull final FriendsViewHolder holder, int position, @NonNull Contacts model) {
String userID = getRef(position).getKey();
usersRef.child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
if (dataSnapshot.child("userState").hasChild("state")) {
String state = dataSnapshot.child("userState").child("state").getValue().toString();
String date = dataSnapshot.child("userState").child("date").getValue().toString();
String time = dataSnapshot.child("userState").child("time").getValue().toString();
if (state.equals("online")){
holder.onlineIcon.setVisibility(View.VISIBLE);
}
else if (state.equals("offline")){
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
}
else {
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
if (dataSnapshot.hasChild("image")){
String userImage = dataSnapshot.child("image").getValue().toString();
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
Picasso.get().load(userImage).placeholder(R.drawable.profile_image).into(holder.profileImage);
}
else {
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public FriendsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup,false);
FriendsViewHolder viewHolder = new FriendsViewHolder(view);
return viewHolder;
}
};
friendsList.setAdapter(adapter);
adapter.startListening();
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder{
TextView userName, userStatus;
CircleImageView profileImage;
ImageView onlineIcon;
public FriendsViewHolder(View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_profile_name);
userStatus = itemView.findViewById(R.id.user_status);
profileImage = itemView.findViewById(R.id.user_profile_image);
onlineIcon = (ImageView) itemView.findViewById(R.id.user_online_status);
}
}
}
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
marked as duplicate by Fantômas
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
What is a NullPointerException, and how do I fix it?
12 answers
i just have problem when i trying to logout from my app and close it and i open it again. The app was crashed there and i think that because onStart on my MainActivity.class not working , i spend lot of times to solve this but i can't , i need help so much.
This is the error
12-27 19:32:01.753 27788-27788/com.suryaaditya.dissent E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.suryaaditya.dissent, PID: 27788
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
at com.suryaaditya.dissent.FriendsFragment.onCreateView(FriendsFragment.java:60)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.suryaaditya.dissent.MainActivity.onStart(MainActivity.java:113)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1392)
at android.app.Activity.performStart(Activity.java:7157)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2940)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1811)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6694)
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)
And this MainActivity
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ViewPager myViewPager;
private TabLayout myTabLayout;
private TabsAccessorAdapter myTabsAccessorAdapter;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
private String currentUserID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
RootRef = FirebaseDatabase.getInstance().getReference();
mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("Dissent");
BottomNavigationView navigationView= findViewById(R.id.bottom_navigation);
final ChatsFragment chatsFragment = new ChatsFragment();
final NotificationsFragment notificationsFragment = new NotificationsFragment();
final FriendsFragment friendsFragment = new FriendsFragment();
final GroupsFragment groupsFragment = new GroupsFragment();
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.navigation_friends){
setFragment(friendsFragment);
return true;
}
else if(id == R.id.navigation_group){
setFragment(groupsFragment);
return true;
}
else if (id == R.id.navigation_chats){
setFragment(chatsFragment);
return true;
}
else if(id == R.id.navigation_notif){
setFragment(notificationsFragment);
return true;
}
return false;
}
});
navigationView.setSelectedItemId(R.id.navigation_friends);
}
private void setFragment(Fragment fragment){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();
}
@Override
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null){
SendUserToLoginActivity();
}
else{
updateUserStatus("online");
VerifyUserExistence();
}
}
@Override
protected void onStop() {
super.onStop();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
private void VerifyUserExistence() {
String currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if ((dataSnapshot.child("name").exists())){
}
else {
SendUserToSettingsActivity();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void SendUserToLoginActivity() {
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginIntent);
}
private void SendUserToFindFriendsActivity() {
Intent findFriendsIntent = new Intent(MainActivity.this , FindFriendsActivity.class);
startActivity(findFriendsIntent);
}
private void SendUserToSettingsActivity() {
Intent settingsIntent = new Intent(MainActivity.this , SettingsActivity.class);
startActivity(settingsIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.option_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.main_logout_option){
updateUserStatus("offline");
mAuth.signOut();
SendUserToLoginActivity();
}
if (item.getItemId() == R.id.main_settings_option){
SendUserToSettingsActivity();
}
if (item.getItemId() == R.id.main_create_group_option){
RequestNewGroup();
}
if (item.getItemId() == R.id.main_find_friends_option){
SendUserToFindFriendsActivity();
}
return true;
}
private void RequestNewGroup() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialog);
builder.setTitle("Enter Group Name : ");
final EditText groupNameField = new EditText(MainActivity.this);
groupNameField.setHint("e.g Dissent");
builder.setView(groupNameField);
builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String groupName = groupNameField.getText().toString();
if (TextUtils.isEmpty(groupName)){
Toast.makeText(MainActivity.this, "Please enter Group Name !" , Toast.LENGTH_SHORT).show();
}
else {
CreateNewGroup(groupName);
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
private void CreateNewGroup(final String groupName) {
RootRef.child("Groups").child(groupName).setValue("")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivity.this, groupName + " is Created Successfully !", Toast.LENGTH_SHORT).show();
}
}
});
}
private void updateUserStatus(String state){
String saveCurrentTime, saveCurrentDate;
Calendar calendar = Calendar.getInstance();
SimpleDateFormat currentTime = new SimpleDateFormat("hh:mm a");
saveCurrentTime = currentTime.format(calendar.getTime());
SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy");
saveCurrentDate = currentDate.format(calendar.getTime());
HashMap<String , Object> onlineStateMap = new HashMap<>();
onlineStateMap.put("time", saveCurrentTime);
onlineStateMap.put("date", saveCurrentDate);
onlineStateMap.put("state", state);
currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).child("userState")
.updateChildren(onlineStateMap);
}
}
This is FriendsFragment
public class FriendsFragment extends Fragment {
private View FriendsView;
private RecyclerView friendsList ;
private DatabaseReference friendsRef, usersRef ;
private FirebaseAuth mAuth;
private String currentUserID;
public FriendsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FriendsView = inflater.inflate(R.layout.fragment_friends, container, false);
friendsList = (RecyclerView) FriendsView.findViewById(R.id.friends_list);
friendsList.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
friendsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
return FriendsView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(friendsRef, Contacts.class)
.build();
FirebaseRecyclerAdapter<Contacts, FriendsViewHolder> adapter =
new FirebaseRecyclerAdapter<Contacts, FriendsViewHolder>(options)
{
@Override
protected void onBindViewHolder(@NonNull final FriendsViewHolder holder, int position, @NonNull Contacts model) {
String userID = getRef(position).getKey();
usersRef.child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
if (dataSnapshot.child("userState").hasChild("state")) {
String state = dataSnapshot.child("userState").child("state").getValue().toString();
String date = dataSnapshot.child("userState").child("date").getValue().toString();
String time = dataSnapshot.child("userState").child("time").getValue().toString();
if (state.equals("online")){
holder.onlineIcon.setVisibility(View.VISIBLE);
}
else if (state.equals("offline")){
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
}
else {
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
if (dataSnapshot.hasChild("image")){
String userImage = dataSnapshot.child("image").getValue().toString();
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
Picasso.get().load(userImage).placeholder(R.drawable.profile_image).into(holder.profileImage);
}
else {
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public FriendsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup,false);
FriendsViewHolder viewHolder = new FriendsViewHolder(view);
return viewHolder;
}
};
friendsList.setAdapter(adapter);
adapter.startListening();
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder{
TextView userName, userStatus;
CircleImageView profileImage;
ImageView onlineIcon;
public FriendsViewHolder(View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_profile_name);
userStatus = itemView.findViewById(R.id.user_status);
profileImage = itemView.findViewById(R.id.user_profile_image);
onlineIcon = (ImageView) itemView.findViewById(R.id.user_online_status);
}
}
}
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
marked as duplicate by Fantômas
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
3
Your getCurrentUser() is null, just check why its coming null?
– S.P
yesterday
Try initializing mAuth object inonCreate()rather thanonCreateView()
– Stuti Kasliwal
yesterday
its null cause user is not online
– Surya Aditya
yesterday
and i sent it to SendUserToLoginActivity(); at onStart but it's not working
– Surya Aditya
yesterday
add a comment |
This question already has an answer here:
What is a NullPointerException, and how do I fix it?
12 answers
i just have problem when i trying to logout from my app and close it and i open it again. The app was crashed there and i think that because onStart on my MainActivity.class not working , i spend lot of times to solve this but i can't , i need help so much.
This is the error
12-27 19:32:01.753 27788-27788/com.suryaaditya.dissent E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.suryaaditya.dissent, PID: 27788
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
at com.suryaaditya.dissent.FriendsFragment.onCreateView(FriendsFragment.java:60)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.suryaaditya.dissent.MainActivity.onStart(MainActivity.java:113)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1392)
at android.app.Activity.performStart(Activity.java:7157)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2940)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1811)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6694)
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)
And this MainActivity
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ViewPager myViewPager;
private TabLayout myTabLayout;
private TabsAccessorAdapter myTabsAccessorAdapter;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
private String currentUserID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
RootRef = FirebaseDatabase.getInstance().getReference();
mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("Dissent");
BottomNavigationView navigationView= findViewById(R.id.bottom_navigation);
final ChatsFragment chatsFragment = new ChatsFragment();
final NotificationsFragment notificationsFragment = new NotificationsFragment();
final FriendsFragment friendsFragment = new FriendsFragment();
final GroupsFragment groupsFragment = new GroupsFragment();
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.navigation_friends){
setFragment(friendsFragment);
return true;
}
else if(id == R.id.navigation_group){
setFragment(groupsFragment);
return true;
}
else if (id == R.id.navigation_chats){
setFragment(chatsFragment);
return true;
}
else if(id == R.id.navigation_notif){
setFragment(notificationsFragment);
return true;
}
return false;
}
});
navigationView.setSelectedItemId(R.id.navigation_friends);
}
private void setFragment(Fragment fragment){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();
}
@Override
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null){
SendUserToLoginActivity();
}
else{
updateUserStatus("online");
VerifyUserExistence();
}
}
@Override
protected void onStop() {
super.onStop();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
private void VerifyUserExistence() {
String currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if ((dataSnapshot.child("name").exists())){
}
else {
SendUserToSettingsActivity();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void SendUserToLoginActivity() {
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginIntent);
}
private void SendUserToFindFriendsActivity() {
Intent findFriendsIntent = new Intent(MainActivity.this , FindFriendsActivity.class);
startActivity(findFriendsIntent);
}
private void SendUserToSettingsActivity() {
Intent settingsIntent = new Intent(MainActivity.this , SettingsActivity.class);
startActivity(settingsIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.option_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.main_logout_option){
updateUserStatus("offline");
mAuth.signOut();
SendUserToLoginActivity();
}
if (item.getItemId() == R.id.main_settings_option){
SendUserToSettingsActivity();
}
if (item.getItemId() == R.id.main_create_group_option){
RequestNewGroup();
}
if (item.getItemId() == R.id.main_find_friends_option){
SendUserToFindFriendsActivity();
}
return true;
}
private void RequestNewGroup() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialog);
builder.setTitle("Enter Group Name : ");
final EditText groupNameField = new EditText(MainActivity.this);
groupNameField.setHint("e.g Dissent");
builder.setView(groupNameField);
builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String groupName = groupNameField.getText().toString();
if (TextUtils.isEmpty(groupName)){
Toast.makeText(MainActivity.this, "Please enter Group Name !" , Toast.LENGTH_SHORT).show();
}
else {
CreateNewGroup(groupName);
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
private void CreateNewGroup(final String groupName) {
RootRef.child("Groups").child(groupName).setValue("")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivity.this, groupName + " is Created Successfully !", Toast.LENGTH_SHORT).show();
}
}
});
}
private void updateUserStatus(String state){
String saveCurrentTime, saveCurrentDate;
Calendar calendar = Calendar.getInstance();
SimpleDateFormat currentTime = new SimpleDateFormat("hh:mm a");
saveCurrentTime = currentTime.format(calendar.getTime());
SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy");
saveCurrentDate = currentDate.format(calendar.getTime());
HashMap<String , Object> onlineStateMap = new HashMap<>();
onlineStateMap.put("time", saveCurrentTime);
onlineStateMap.put("date", saveCurrentDate);
onlineStateMap.put("state", state);
currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).child("userState")
.updateChildren(onlineStateMap);
}
}
This is FriendsFragment
public class FriendsFragment extends Fragment {
private View FriendsView;
private RecyclerView friendsList ;
private DatabaseReference friendsRef, usersRef ;
private FirebaseAuth mAuth;
private String currentUserID;
public FriendsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FriendsView = inflater.inflate(R.layout.fragment_friends, container, false);
friendsList = (RecyclerView) FriendsView.findViewById(R.id.friends_list);
friendsList.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
friendsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
return FriendsView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(friendsRef, Contacts.class)
.build();
FirebaseRecyclerAdapter<Contacts, FriendsViewHolder> adapter =
new FirebaseRecyclerAdapter<Contacts, FriendsViewHolder>(options)
{
@Override
protected void onBindViewHolder(@NonNull final FriendsViewHolder holder, int position, @NonNull Contacts model) {
String userID = getRef(position).getKey();
usersRef.child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
if (dataSnapshot.child("userState").hasChild("state")) {
String state = dataSnapshot.child("userState").child("state").getValue().toString();
String date = dataSnapshot.child("userState").child("date").getValue().toString();
String time = dataSnapshot.child("userState").child("time").getValue().toString();
if (state.equals("online")){
holder.onlineIcon.setVisibility(View.VISIBLE);
}
else if (state.equals("offline")){
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
}
else {
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
if (dataSnapshot.hasChild("image")){
String userImage = dataSnapshot.child("image").getValue().toString();
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
Picasso.get().load(userImage).placeholder(R.drawable.profile_image).into(holder.profileImage);
}
else {
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public FriendsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup,false);
FriendsViewHolder viewHolder = new FriendsViewHolder(view);
return viewHolder;
}
};
friendsList.setAdapter(adapter);
adapter.startListening();
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder{
TextView userName, userStatus;
CircleImageView profileImage;
ImageView onlineIcon;
public FriendsViewHolder(View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_profile_name);
userStatus = itemView.findViewById(R.id.user_status);
profileImage = itemView.findViewById(R.id.user_profile_image);
onlineIcon = (ImageView) itemView.findViewById(R.id.user_online_status);
}
}
}
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
This question already has an answer here:
What is a NullPointerException, and how do I fix it?
12 answers
i just have problem when i trying to logout from my app and close it and i open it again. The app was crashed there and i think that because onStart on my MainActivity.class not working , i spend lot of times to solve this but i can't , i need help so much.
This is the error
12-27 19:32:01.753 27788-27788/com.suryaaditya.dissent E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.suryaaditya.dissent, PID: 27788
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
at com.suryaaditya.dissent.FriendsFragment.onCreateView(FriendsFragment.java:60)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.suryaaditya.dissent.MainActivity.onStart(MainActivity.java:113)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1392)
at android.app.Activity.performStart(Activity.java:7157)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2940)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1811)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6694)
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)
And this MainActivity
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ViewPager myViewPager;
private TabLayout myTabLayout;
private TabsAccessorAdapter myTabsAccessorAdapter;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
private String currentUserID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
RootRef = FirebaseDatabase.getInstance().getReference();
mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("Dissent");
BottomNavigationView navigationView= findViewById(R.id.bottom_navigation);
final ChatsFragment chatsFragment = new ChatsFragment();
final NotificationsFragment notificationsFragment = new NotificationsFragment();
final FriendsFragment friendsFragment = new FriendsFragment();
final GroupsFragment groupsFragment = new GroupsFragment();
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.navigation_friends){
setFragment(friendsFragment);
return true;
}
else if(id == R.id.navigation_group){
setFragment(groupsFragment);
return true;
}
else if (id == R.id.navigation_chats){
setFragment(chatsFragment);
return true;
}
else if(id == R.id.navigation_notif){
setFragment(notificationsFragment);
return true;
}
return false;
}
});
navigationView.setSelectedItemId(R.id.navigation_friends);
}
private void setFragment(Fragment fragment){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();
}
@Override
protected void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser == null){
SendUserToLoginActivity();
}
else{
updateUserStatus("online");
VerifyUserExistence();
}
}
@Override
protected void onStop() {
super.onStop();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null){
updateUserStatus("offline");
}
}
private void VerifyUserExistence() {
String currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if ((dataSnapshot.child("name").exists())){
}
else {
SendUserToSettingsActivity();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void SendUserToLoginActivity() {
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginIntent);
}
private void SendUserToFindFriendsActivity() {
Intent findFriendsIntent = new Intent(MainActivity.this , FindFriendsActivity.class);
startActivity(findFriendsIntent);
}
private void SendUserToSettingsActivity() {
Intent settingsIntent = new Intent(MainActivity.this , SettingsActivity.class);
startActivity(settingsIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.option_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.main_logout_option){
updateUserStatus("offline");
mAuth.signOut();
SendUserToLoginActivity();
}
if (item.getItemId() == R.id.main_settings_option){
SendUserToSettingsActivity();
}
if (item.getItemId() == R.id.main_create_group_option){
RequestNewGroup();
}
if (item.getItemId() == R.id.main_find_friends_option){
SendUserToFindFriendsActivity();
}
return true;
}
private void RequestNewGroup() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.AlertDialog);
builder.setTitle("Enter Group Name : ");
final EditText groupNameField = new EditText(MainActivity.this);
groupNameField.setHint("e.g Dissent");
builder.setView(groupNameField);
builder.setPositiveButton("Create", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String groupName = groupNameField.getText().toString();
if (TextUtils.isEmpty(groupName)){
Toast.makeText(MainActivity.this, "Please enter Group Name !" , Toast.LENGTH_SHORT).show();
}
else {
CreateNewGroup(groupName);
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
private void CreateNewGroup(final String groupName) {
RootRef.child("Groups").child(groupName).setValue("")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivity.this, groupName + " is Created Successfully !", Toast.LENGTH_SHORT).show();
}
}
});
}
private void updateUserStatus(String state){
String saveCurrentTime, saveCurrentDate;
Calendar calendar = Calendar.getInstance();
SimpleDateFormat currentTime = new SimpleDateFormat("hh:mm a");
saveCurrentTime = currentTime.format(calendar.getTime());
SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy");
saveCurrentDate = currentDate.format(calendar.getTime());
HashMap<String , Object> onlineStateMap = new HashMap<>();
onlineStateMap.put("time", saveCurrentTime);
onlineStateMap.put("date", saveCurrentDate);
onlineStateMap.put("state", state);
currentUserID = mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).child("userState")
.updateChildren(onlineStateMap);
}
}
This is FriendsFragment
public class FriendsFragment extends Fragment {
private View FriendsView;
private RecyclerView friendsList ;
private DatabaseReference friendsRef, usersRef ;
private FirebaseAuth mAuth;
private String currentUserID;
public FriendsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FriendsView = inflater.inflate(R.layout.fragment_friends, container, false);
friendsList = (RecyclerView) FriendsView.findViewById(R.id.friends_list);
friendsList.setLayoutManager(new LinearLayoutManager(getContext()));
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
friendsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
return FriendsView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions options =
new FirebaseRecyclerOptions.Builder<Contacts>()
.setQuery(friendsRef, Contacts.class)
.build();
FirebaseRecyclerAdapter<Contacts, FriendsViewHolder> adapter =
new FirebaseRecyclerAdapter<Contacts, FriendsViewHolder>(options)
{
@Override
protected void onBindViewHolder(@NonNull final FriendsViewHolder holder, int position, @NonNull Contacts model) {
String userID = getRef(position).getKey();
usersRef.child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
if (dataSnapshot.child("userState").hasChild("state")) {
String state = dataSnapshot.child("userState").child("state").getValue().toString();
String date = dataSnapshot.child("userState").child("date").getValue().toString();
String time = dataSnapshot.child("userState").child("time").getValue().toString();
if (state.equals("online")){
holder.onlineIcon.setVisibility(View.VISIBLE);
}
else if (state.equals("offline")){
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
}
else {
holder.onlineIcon.setVisibility(View.INVISIBLE);
}
if (dataSnapshot.hasChild("image")){
String userImage = dataSnapshot.child("image").getValue().toString();
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
Picasso.get().load(userImage).placeholder(R.drawable.profile_image).into(holder.profileImage);
}
else {
String profileName = dataSnapshot.child("name").getValue().toString();
String profileStatus = dataSnapshot.child("status").getValue().toString();
holder.userName.setText(profileName);
holder.userStatus.setText(profileStatus);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public FriendsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup,false);
FriendsViewHolder viewHolder = new FriendsViewHolder(view);
return viewHolder;
}
};
friendsList.setAdapter(adapter);
adapter.startListening();
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder{
TextView userName, userStatus;
CircleImageView profileImage;
ImageView onlineIcon;
public FriendsViewHolder(View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.user_profile_name);
userStatus = itemView.findViewById(R.id.user_status);
profileImage = itemView.findViewById(R.id.user_profile_image);
onlineIcon = (ImageView) itemView.findViewById(R.id.user_online_status);
}
}
}
This question already has an answer here:
What is a NullPointerException, and how do I fix it?
12 answers
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited yesterday
Fantômas
32.3k156288
32.3k156288
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked yesterday
Surya Aditya
11
11
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Surya Aditya is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
marked as duplicate by Fantômas
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Fantômas
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
yesterday
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
3
Your getCurrentUser() is null, just check why its coming null?
– S.P
yesterday
Try initializing mAuth object inonCreate()rather thanonCreateView()
– Stuti Kasliwal
yesterday
its null cause user is not online
– Surya Aditya
yesterday
and i sent it to SendUserToLoginActivity(); at onStart but it's not working
– Surya Aditya
yesterday
add a comment |
3
Your getCurrentUser() is null, just check why its coming null?
– S.P
yesterday
Try initializing mAuth object inonCreate()rather thanonCreateView()
– Stuti Kasliwal
yesterday
its null cause user is not online
– Surya Aditya
yesterday
and i sent it to SendUserToLoginActivity(); at onStart but it's not working
– Surya Aditya
yesterday
3
3
Your getCurrentUser() is null, just check why its coming null?
– S.P
yesterday
Your getCurrentUser() is null, just check why its coming null?
– S.P
yesterday
Try initializing mAuth object in
onCreate() rather than onCreateView()– Stuti Kasliwal
yesterday
Try initializing mAuth object in
onCreate() rather than onCreateView()– Stuti Kasliwal
yesterday
its null cause user is not online
– Surya Aditya
yesterday
its null cause user is not online
– Surya Aditya
yesterday
and i sent it to SendUserToLoginActivity(); at onStart but it's not working
– Surya Aditya
yesterday
and i sent it to SendUserToLoginActivity(); at onStart but it's not working
– Surya Aditya
yesterday
add a comment |
1 Answer
1
active
oldest
votes
The problem is on FriendsFragment. You are trying to get Uid on a null object reference which means that the user isnt logged in when you transact to FriendsFragment.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
So any suggestion ?
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
|
show 11 more comments
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The problem is on FriendsFragment. You are trying to get Uid on a null object reference which means that the user isnt logged in when you transact to FriendsFragment.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
So any suggestion ?
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
|
show 11 more comments
The problem is on FriendsFragment. You are trying to get Uid on a null object reference which means that the user isnt logged in when you transact to FriendsFragment.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
So any suggestion ?
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
|
show 11 more comments
The problem is on FriendsFragment. You are trying to get Uid on a null object reference which means that the user isnt logged in when you transact to FriendsFragment.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
The problem is on FriendsFragment. You are trying to get Uid on a null object reference which means that the user isnt logged in when you transact to FriendsFragment.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
answered yesterday
Melvin Otieno
3210
3210
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Melvin Otieno is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
So any suggestion ?
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
|
show 11 more comments
So any suggestion ?
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
So any suggestion ?
– Surya Aditya
yesterday
So any suggestion ?
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
Im so confuse rn i try to set FirebaseUser at onStart in FriendsFragment
– Surya Aditya
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
No. Kindly post your whole MainActivity and FriendsFragment classes so that i can have a clear picture of your code
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
From which activity are you doing the fragment transaction for FriendFragment
– Melvin Otieno
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
Main activity @Melvin Otieno
– Surya Aditya
yesterday
|
show 11 more comments
3
Your getCurrentUser() is null, just check why its coming null?
– S.P
yesterday
Try initializing mAuth object in
onCreate()rather thanonCreateView()– Stuti Kasliwal
yesterday
its null cause user is not online
– Surya Aditya
yesterday
and i sent it to SendUserToLoginActivity(); at onStart but it's not working
– Surya Aditya
yesterday