当前位置: 首页 > 知识库问答 >
问题:

为什么在OnCreate方法中检查EditText不等于null

帅锦
2023-03-14

让我澄清一下我的问题,OnCreate方法用于初始化视图并展平布局,因此我认为,如果OnCreate方法在一切之前运行,意味着我的EditText字段为空意味着为空,那么这个条件是如何工作的。但它运行良好,这意味着我理解错误。请告诉我我错过了什么。

代码片段取自google codelabs,我们在那里提供电话号码。在editText中,通过点击设备内置键盘上的发送按钮,我们启动电话应用程序来拨打给定号码。

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;
                }
   });
}

共有2个答案

岳浩宕
2023-03-14

根据你的代码。。。

调用findviewbyd(R.id.editText_main) editText时,code>可以返回null。setOnEditorActionListener在这种情况下,将引发NullPointerException,导致应用程序崩溃。

因此,如果您确定在引用的布局中总是有一个id“editText_main”,那么“if condition”就没用了。但是,如果假设您根据某些条件设置了不同的布局,则可能没有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() {
   });
}
凌博实
2023-03-14

如果在布局膨胀之前尝试访问editText,空检查可防止空指针异常。但是,如果在调用膨胀布局后在onCreate方法中设置此变量,则editText不应为null。text属性可能是(因为您还没有键入任何内容),但组件本身不应为null。

 类似资料:
  • 问题内容: 我开始于: 然后尝试: 最终: 从那以后我发现: 因此,我已经解决了最初的问题(有点),但是为什么数组不能互相匹配? 问题答案: Javascript数组是对象,您不能简单地使用相等运算符来了解那些对象的 内容 是否相同。如果两个物体实际上是完全一样的情况下(如平等运营商将只测试,作品和太)。 如果您需要检查两个数组是否相等,我建议只遍历两个数组并验证所有元素具有相同的值(并且两个数组

  • 问题内容: 我正在尝试制作我的第一个Android应用程序。我注意到,如果数据库不存在,则不会调用该方法来创建表。但是,即使我尝试调试,该方法也无法正常工作。 请查看下面的代码,并给我任何建议。任何帮助将不胜感激。 问题答案: 我也遇到了 SQLiteOpenHelper的 麻烦。对我有用的是存储成员变量 在SQLiteOpenHelper子类中并调用 在构造函数中。 该问题的答案还包括一些有用的

  • 我正在学习Java数据结构课程,目前正在学习单链表。在addHead的方法中,为什么我们需要检查tail==null?如果是真的,为什么尾巴=头? 完整代码:https://venus.cs.qc.cuny.edu/~ryba/cs313/linkedList/LinkedList.java

  • 问题内容: 我喜欢在这里使用这种方法: 唯一的缺点(例如,与Google Guava相比)是无法静态导入该方法。也就是说,这是没有用的: …因为我的Eclipse编译器在编写时无法正确链接该方法 错误是: Object类型中的equals(Object)方法不适用于参数(…,…) 这是为什么?如果在任何超级类型中都存在具有相同名称(但签名不相同)的方法,我的静态导入方法是否不适用?这是JLS中正式

  • 问题内容: 我在ColdFusion代码中碰巧遇到了这些值,但Google计算器似乎有相同的“错误”,但差不为零。 416582.2850-411476.8100-5105.475 = -2.36468622461E-011 http://www.google.com/search?hl=zh_CN&rlz=1C1GGLS_enUS340US340&q=416582.2850+-+411476.8

  • 问题内容: 我知道Google搜索可以找到合适的答案,但是我更喜欢听您的个人(也许是技术性的)意见。 Java和C#之间在引发异常方面有所不同的主要原因是什么? 在Java中,引发异常的方法的签名必须使用“ throws”关键字,而在C#中,您不知道在编译时是否可以引发异常。 问题答案: 因为对已检查异常的响应几乎总是: 如果您确实知道如果抛出特定异常,您可以执行某些操作,那么您可以捕获该异常,然