提问者:小点点

NullPointerException导致appcrash[重复]


我有个问题。 在我的应用程序中,您可以选择设置一个帐户(注册-->然后您可以看到登录屏幕并有机会登录)。当您到达登录屏幕并尝试使用当前注册的帐户登录时,应用程序崩溃并显示以下错误消息:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

如果你们能帮我,我将非常感谢!

代码如下所示:

public class UserHomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, UserOnFragmentBtnSelected {
Toolbar toolbar;
DrawerLayout drawer;
ActionBarDrawerToggle toggle;
NavigationView navigationView;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
Fragment fragment;
String username;
TextView tf, tf2;





@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_nav_user);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    drawer = findViewById(R.id.drawer_layout);
    toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    navigationView = findViewById(R.id.nav_view);
    navigationView.bringToFront();
    navigationView.setCheckedItem(R.id.nav_home);
    navigationView.setNavigationItemSelectedListener(this);

    fragmentManager = getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.container_fragment, new UserFragmentHome());
    fragmentTransaction.commit();
    getUsername();



}

private void getUsername() {

    final FirebaseFirestore db = FirebaseFirestore.getInstance();
    final FirebaseAuth mAuth = FirebaseAuth.getInstance();
    DocumentReference docRef = db.collection("users").document(mAuth.getCurrentUser().getUid());
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    Users user = document.toObject(Users.class);
                    //getSupportActionBar().setTitle("Hallo " + user.getUsername());
                    username = user.getUsername();
                    tf = findViewById(R.id.nav_header_user_name);
                    tf2 = findViewById(R.id.nav_header_user_amount);

                        if(user == null && username == null) {
                            tf2.setText("Loading");
                        }else{
                            tf.setText(username + "");
                            tf2.setText(user.getKontostand() + "");
                        }

                    getSupportActionBar().setTitle(R.string.app_name);
                    kontostandUpdaten();
                } else {
                    Toast.makeText(getApplicationContext(), "Der aktuelle Nutzer konnte nicht in der Datenbank gefunden werden.", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(getApplicationContext(), "Ein Problem ist aufgetreten " + task.getException().toString(), Toast.LENGTH_SHORT).show();
            }
        }
    });
}

}


共1个答案

匿名用户

您为Textbow tf1和tf2创建了两个全局变量,但实际上没有初始化它,要解决这个问题很简单,在类的onCreate方法中初始化您的textviews!

tf1 = (TextView)findViewById(R.id.text1);
tf2 = (TextView)findViewById(R.id.text2);

请访问此链接以获取文档