navigation - 当我尝试在智能手机上运行它但 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)
解决方案
推荐阅读
- python - 打印时python numpy数组中的双嵌套括号意味着什么?
- angular - 无法将 ElFinder 集成到 Angular 项目中
- regex - 正则表达式:模式匹配多个模式
- ajax - Laravel File Upload with Ajax Show 405 Method Not Allowed Error on Large File Size 20 MB
- postgresql - 如何在 SAP Powerbuilder (12.5) 中调用存储过程 postgresql?
- c# - 如何在 atom-editor 中更改 C# 版本?
- php - 下载一个在 PHP 中受密码保护的 Excel 工作表?
- javascript - 是否可以使用更短的辅助函数而不是 typeof something !== "undefined"?
- bert-language-model - BERT 训练检查点
- php - Codeigniter Form-Validation:验证输入是否等于某个字符串