#navigation #header #drawerlayout
Вопрос:
Я хочу получить данные пользователя из Firebase ,такие как имя, кровь, адрес электронной почты… Для отображения в навигации, но когда я запускаю приложение, чтобы проверить, все ли в порядке, оно не показывает ошибки в IED, но приложение вылетает, когда я пытаюсь войти в систему, чтобы перейти к основной деятельности, так как это показывает, что в основной деятельности, как я уже сказал, ошибка навигации.
public class MainActivity extends AppCompatActivity { //Instance for FireBase and Data Base private FirebaseAuth
FibAuth; private DatabaseReference FibDatabaseRef; private
DrawerLayout DrawerLayout; private Toolbar Toolbar; private
NavigationView navigationView; private ActionBarDrawerToggle
toggle; private CircleImageView nav_user_image; private
TextView nav_user_type, nav_user_name, nav_user_blood,
nav_user_email;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Start Activities
DrawerLayout=findViewById(R.id.DrawerLayout);
Toolbar=findViewById(R.id.ToolBar);
nav_user_image = navigationView.getHeaderView(0).findViewById(R.id.NavImage);
nav_user_type = navigationView.getHeaderView(0).findViewById(R.id.NavType);
nav_user_name = navigationView.getHeaderView(0).findViewById(R.id.NavName);
nav_user_blood = navigationView.getHeaderView(0).findViewById(R.id.NavBlood);
nav_user_email = navigationView.getHeaderView(0).findViewById(R.id.NavEmail);
FibDatabaseRef= FirebaseDatabase.getInstance().getReference().child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
FibDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
for (DataSnapshot userSnapshot:snapshot.getChildren()){
String userName=userSnapshot.child("Name").getValue(String.class);
nav_user_name.setText(userName);
String userBlood=userSnapshot.child("BloodGroup").getValue(String.class);
nav_user_blood.setText(userBlood);
String userEmail=userSnapshot.child("Email").getValue(String.class);
nav_user_email.setText(userEmail);
String userType=userSnapshot.child("Type").getValue(String.class);
nav_user_type.setText(userType);
String userImageUrl=userSnapshot.child("Profile").getValue(String.class);
Glide.with(getApplicationContext()).load(userImageUrl).into(nav_user_image);
}
}
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error) {
}
});
setSupportActionBar(Toolbar);
getSupportActionBar().setTitle("Blood Management App");
navigationView=findViewById(R.id.NavView);
toggle=new ActionBarDrawerToggle(this,DrawerLayout,Toolbar,R.string.nav_drawer_open,R.string.nav_drawer_close);
DrawerLayout.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
switch(item.getItemId()){
case R.id.logout:
try{
FirebaseAuth.getInstance().signOut();
Toast.makeText(MainActivity.this, "User Sign out!", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
finish();
}catch(Exception exception){
exception.printStackTrace();
}
DrawerLayout.closeDrawer(GravityCompat.START);
break;
}
return true;
}
}); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="200dp"
android:orientation="vertical" android:paddingTop="5dp"
android:paddingLeft="20dp"
android:background="@drawable/header_image">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@ id/NavImage"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginTop="30dp"
android:layout_marginBottom="10dp"
android:src="@drawable/profile"> </de.hdodenhof.circleimageview.CircleImageView>
<TextView
android:id="@ id/NavType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:fontFamily="@font/cabin_sketch"
android:text="Users Type"
android:textColor="#E12ED2"
android:textSize="15dp"></TextView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@ id/NavName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Users Name"
android:textColor="@color/white"
android:fontFamily="@font/carter_one"
android:textSize="15dp"
android:layout_marginRight="10dp">
</TextView>
<TextView
android:id="@ id/NavBlood"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/merienda_one"
android:text="Blood"
android:textColor="#B30B00"
android:textSize="15dp"
android:textStyle="bold"></TextView> </LinearLayout> <TextView
android:id="@ id/NavEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Users Email"
android:textColor="#F58C00"
android:textSize="10dp"
android:textStyle="italic"
android:layout_marginRight="10dp"> </TextView>
</LinearLayout>
Ошибка выглядит так на смартфоне REDMI
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.bloodbuddy.snr/com.bloodbuddy.snr.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method
'android.view.View
com.google.android.material.navigation.NavigationView.getHeaderView(int)'
on a null object reference at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3322)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3471)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2058)
at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:226) at
android.app.ActivityThread.main(ActivityThread.java:7592) at
java.lang.reflect.Method.invoke(Native Method) at
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) Caused by: java.lang.NullPointerException: Attempt to invoke virtual
method 'android.view.View
com.google.android.material.navigation.NavigationView.getHeaderView(int)'
on a null object reference at
com.bloodbuddy.snr.MainActivity.onCreate(MainActivity.java:49) at
android.app.Activity.performCreate(Activity.java:7916) at
android.app.Activity.performCreate(Activity.java:7903) at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3297)