为什么我们在 OnCreate 方法中检查 EditText 不等于 null
Why we check EditText not equal to null in OnCreate method
让我澄清一下我的问题
OnCreate 方法用于初始化视图和展平布局,所以我在想如果 onCreate 方法是 运行 之前一切都意味着我的 EditText 字段为空意味着 null 那么这种情况是如何工作的。但它工作正常,这意味着我理解不正确。
请告诉我我缺少什么。
代码片段取自 google 我们提供 phone 的代码实验室。在 editText 中单击设备内置键盘中的发送按钮,我们启动 phone 应用程序来拨打给定号码。
EditText editText = findViewById(R.id.editText_main);
if (editText != null) {
editText.setOnEditorActionListener
(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
return false;
}
});
}
如果您在布局扩充之前尝试访问 editText,则空检查可防止出现空指针异常。但是,如果您在调用扩充布局后在 onCreate 方法中设置此变量,则 editText 不应为空。文本 属性 可能是(因为您还没有输入任何内容)但组件本身不应该为 null。
根据您的代码...
如果在 activity 的引用 xml 布局中找不到 ID 为“editText_main”的视图,则调用 findViewById(R.id.editText_main);
可以 return 为 null,当您在这种情况下调用 editText.setOnEditorActionListener
时,将抛出 NullPointerException 导致您的应用程序崩溃。
因此,如果您确定在您的引用布局中始终有一个 id“editText_main”,那么“if 条件”就没有用了。但是,如果假设您根据某些条件设置了不同的布局,则可能没有 ID 为“editText_main”的视图,那么检查 editText 是否为空很重要。
示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(a == b){
// Layout containing view with id "editText_main"
setContentView(R.layout.sample_activity_1);
}
else if(a == c){
// Layout without "editText_main"
setContentView(R.layout.sample_activity_2);
}
else{
// Layout without "editText_main"
setContentView(R.layout.sample_activity_3);
}
EditText editText = findViewById(R.id.editText_main);
// editText will be null if the referenced layout is not sample_activity_1
// which would cause a NullPointerException
editText.setOnEditorActionListener
(new TextView.OnEditorActionListener() {
});
}
让我澄清一下我的问题 OnCreate 方法用于初始化视图和展平布局,所以我在想如果 onCreate 方法是 运行 之前一切都意味着我的 EditText 字段为空意味着 null 那么这种情况是如何工作的。但它工作正常,这意味着我理解不正确。 请告诉我我缺少什么。
代码片段取自 google 我们提供 phone 的代码实验室。在 editText 中单击设备内置键盘中的发送按钮,我们启动 phone 应用程序来拨打给定号码。
EditText editText = findViewById(R.id.editText_main);
if (editText != null) {
editText.setOnEditorActionListener
(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
return false;
}
});
}
如果您在布局扩充之前尝试访问 editText,则空检查可防止出现空指针异常。但是,如果您在调用扩充布局后在 onCreate 方法中设置此变量,则 editText 不应为空。文本 属性 可能是(因为您还没有输入任何内容)但组件本身不应该为 null。
根据您的代码...
如果在 activity 的引用 xml 布局中找不到 ID 为“editText_main”的视图,则调用 findViewById(R.id.editText_main);
可以 return 为 null,当您在这种情况下调用 editText.setOnEditorActionListener
时,将抛出 NullPointerException 导致您的应用程序崩溃。
因此,如果您确定在您的引用布局中始终有一个 id“editText_main”,那么“if 条件”就没有用了。但是,如果假设您根据某些条件设置了不同的布局,则可能没有 ID 为“editText_main”的视图,那么检查 editText 是否为空很重要。
示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(a == b){
// Layout containing view with id "editText_main"
setContentView(R.layout.sample_activity_1);
}
else if(a == c){
// Layout without "editText_main"
setContentView(R.layout.sample_activity_2);
}
else{
// Layout without "editText_main"
setContentView(R.layout.sample_activity_3);
}
EditText editText = findViewById(R.id.editText_main);
// editText will be null if the referenced layout is not sample_activity_1
// which would cause a NullPointerException
editText.setOnEditorActionListener
(new TextView.OnEditorActionListener() {
});
}