首页 > 解决方案 > 当我尝试在智能手机上运行它但 IED 中没有错误时,我收到一个错误,说 navigationView.getHeaderView(int) 的对象引用为空

问题描述

我想从 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)

标签: navigationheaderdrawerlayout

解决方案


推荐阅读