在setContentView()之前调用findViewById()会导致NullPointerException,但并非总是如此吗?

Panagiss:

好吧,NullPointerException当我打电话findViewById()访问一个按钮时,我得到一个提示我想我理解为什么会收到此错误,但是我的脑海中还没有解决一些问题。好吧,我想收到这个错误是因为我将findViewById()调用从onCreate()方法内部移动到了所有方法之外的类范围。

因此,现在我方法之外初始化Button的和好吧,如果我理解正确,就会发生这种情况(空错误),因为该方法在该方法之后被调用,所以这就是它引发异常的原因。EditTextonCreate()setContentView()findViewById()

但是我不明白的是,我在第二项活动中做过同样的事情,并且在没有任何空异常的情况下工作良好。而且我正在onCreate()方法外初始化Buttons

确实使我有些困惑。任何帮助清除我脑海中的问题,将不胜感激。

第一次活动

public class FirstActivity extends AppCompatActivity {
 
    private Button signUpButton= findViewById(R.id.lo_signUpButton);
    private Button loginButton = findViewById(R.id.lo_loginButton);
    private EditText username= findViewById(R.id.lo_usernameText);
    private EditText password= findViewById(R.id.lo_passwordText);

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //set view
        setContentView(R.layout.activity_login);
        Log.i(TAG,"Create "+formatter.format(new Date()));

        //listeners
        signUpButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(LoginActivity.this, SignUpActivity.class));
                finish();
                }
        });

}

第二次活动

public class SecondActivity extends AppCompatActivity {

    private EditText username = findViewById(R.id.su_username);
    private EditText password = findViewById(R.id.su_password);
    private TextView errorText= findViewById(R.id.su_error_msg);
    private Button signUpButton=findViewById(R.id.su_signupButton);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //set view
        setContentView(R.layout.activity_signup);
        Log.i(TAG,"Create");

        //listeners
        Button backButton = findViewById(R.id.su_backButton);
        backButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(SignUpActivity.this, LoginActivity.class));
                Log.i(TAG,"Going Back ");
                finish();
            }
        }); 
加布里埃尔·马里奥蒂(Gabriele Mariotti):

不能使用以下初始化:

public class SecondActivity extends AppCompatActivity {

    private Button signUpButton= findViewById(R.id.lo_signUpButton);
    //....
}

用:

public class SecondActivity extends AppCompatActivity {

    private Button signUpButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //set view
        setContentView(R.layout.activity_signup)
        signUpButton= findViewById(R.id.lo_signUpButton);
        //...
    }
}

在第二个活动中,您正在做一些不同的事情:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    Button backButton = findViewById(R.id.su_backButton);
    //...
}

并且它是正确的,因为您调用之后backButtonfindViewById方法内部声明和初始化onCreatesetContentView

在第一个活动中,您正在使用设置侦听器,signUpButton.setOnClickListener但未signUpButton初始化(因为它在onCreate方法之外

同样在第二活动中,OnCreate方法中未使用其他未正确初始化的按钮

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

findViewById()可能会产生NullPointerException

Calling findViewById() before setContentView() causes NullPointerException but not always?

通用类型规范参数-有时是可选的,但并非总是如此

为什么我的WebClient在大多数情况下会返回404错误,但并非总是如此?

链接器映射文件有时具有错误的符号,但并非总是如此

Python静态方法并非总是可调用的

UIKeyboardWillChangeFrameNotification并非总是被调用

push :: device_vector.pushback()会导致对memcpy的调用吗?

并非总是调用AJAX onreadystatechange函数

listView中的按钮并非总是会触发

Mapbox,MapSnapshotter.callback并非总是被调用

模板实例化之前,并非总是选择重载功能

C#:使用未填充的列表调用List <T> .Item [Int32]有时会引发异常,但并非总是如此

用`new`调用默认参数会导致内存泄漏吗?

javascript在空间时拆分但并非总是如此

删除具有破坏性-但并非总是如此吗?

并非总是调用IDynamicMetaObjectProvider.GetMetaObject

SQL Server在UPDATE / INSERT操作中的性能非常低(但并非总是如此)

SQL将多行转换为单行,但并非总是如此

使用JS和HTML可以更改样式,但JS和CSS并非总是如此

Django“配置不正确”,但并非总是如此

在调用任何函数之前,调用函数的for循环会完成吗?

Django网站呈现为一团糟(间歇性,并非总是如此)

TestNG测试将永远持续(但并非总是如此)

某些初创公司的 PSU 发出嗡嗡声,但并非总是如此

Scala 中的方法调用反射会导致性能下降吗?

PropertyChangedEventManager - 调用 RemoveHandler 失败会导致泄漏吗?

在 STFLD 之前添加对方法的调用会导致 InvalidProgramException

如何处理重复项并支持一个版本但并非总是如此