如何从EditText检查NullPointerException

时间:2018-12-26 19:45:12

标签: java android nullpointerexception android-edittext

我想计算平均成绩,现在我有了基本知识和布局。当<main> <div> <p><span id="mainTitle">Sample Text</span> <hr> <i class="fa fa-id-card" aria-hidden="true"></i><span id="underTitle">Sample Text</span> </p> </div> <input type="submit" class="btn" value="Sample Text"> <div class="projects"> <h1 id="proTitle">Sample Text</h1> <img src="images/codebg.jpg" alt="Sample Text" id="codeimg"> </div> </main> 保持打开状态时,它将抛出EditText,我知道它是什么,但我不知道如何用我的代码检查/处理它。有人可以解释我该怎么做吗?

欢迎任何提示等!

NullPointerException

4 个答案:

答案 0 :(得分:1)

  

因此,您必须小心在潜在的null上调用“ toString()”   对象。

尤其是如果您打算将其转换为两倍。

  

注意*您的代码还会从的单个条目创建一个双精度数组。   EditText,以便在投射之前进一步检查文本格式   还应该做以确保它是双重的。您可以采用惰性方式,然后将其包装在try / catch中   告诉他们,如果您愿意,它的格式不正确。

处理数字格式异常意味着您需要先确认它是双精度型,然后再使用它。您可以使用一个不错的实用程序,也可以编写一个简单的帮助程序方法。 Guava有一个辅助方法,Apache有辅助方法,或者您可以像下面这样编写正则表达式模式匹配器。 regex的好处是您无需依靠try / catch来识别问题。

How to check that a string is parseable to a double?

但是为了彻底,您可以执行以下操作:

private boolean isDouble(String value) {
    try {
        Double.parseDouble(value);
        return true;
    } catch (Exception ex) {
        return false;
    }
}

您可以选择几种方法来处理空值。

1)在“ if / else”语句中检查是否为空。

double grade[];
if (myText.getText() != null && isDouble(myText.getText().toString()) {
    grade = {Double.parseDouble(myText.getText().toString())}
} else {
    //it's null, don't use it
}

2)检查空内联

if (isDouble(myText.getText().toString()) {
    double grade[] = myText.getText() == null ? {0.0, 0.0} : {Double.parseDouble(myText.getText().toString())}
}

3)允许将null作为选项

double grade[] = myText.getText() == null ? null : {Double.parseDouble(myText.getText().toString())}

4)作弊并使用“尝试/捕获”功能(如果您不想掌握最好的处理方法,只是想确保它不会崩溃,您可以将数据格式问题通知用户,您可以简单地将所有代码包装在Try / Catch中,然后每次都说“格式不正确”,但这并不是很具描述性,可能还不够有用,只是说说而已。

5)或者,如果您愿意使用Kotlin,可以为每种方法制作出色的扩展方法。

fun EditText.doubleArrayOrDefault(): ArrayList<Double> {
      return if (this.getText() != null && isDouble(myText.getText().toString())) {
            {Double.parseDouble(myText.getText().toString())}
      } else {
            {0.0, 0.0} // or whatever you want your default to be
      }
 }

6)最后,您可以简单地使用DataBinding,这始终是我的个人喜好。更新您的gradle以启用DataBining,并接受不可避免的情况,这是自切片中断之后发生的最大事情;)。

您将拥有的活动

var myObservabeText: ObservableField<String> = ObservableField("defaultTextIfAny")

在onCreate中,您将设置变量

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_my)
    mBinding.activity = this
}

在XML中,您将其更新为

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:bind="http://schemas.android.com/apk/res-auto">

    <data>
        <variable name="activity" type="com.package.a35.activities.MyActivity" />
    </data>

     <EditText
        android:id="@+id/myText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@={activity.myObservableText}" />

当然,如果您要编写一个非常简单的漂亮适配器,也可以向适配器添加JVMStatic来处理与double数组的绑定。

当然这都是伪的,在实际的IDE中没有键入,但是会非常接近,因此希望可以为您提供选项。

祝您好运,希望这些选项之一能很好地满足您的需求。

快乐编码。

答案 1 :(得分:0)

您需要检查编辑文本是否不为空,您可以执行以下操作:

private String getGrade1() {
        if ((EditText) findViewById(R.id.grade1)).getText().toString() != null || 
        (EditText)findViewById(R.id.grade1)).getText().toString() != "") {
           return (EditText) findViewById(R.id.grade1)).getText().toString();
         } else {
         //show a toast saying the the user needs to fill this input
        }

答案 2 :(得分:0)

您可以在解析文本视图之前简单地检查textview的文本是否不为null,然后对其进行正确处理。

TextView tvGrade1 = findViewById(R.id.grade1));
TextView tvWeight1 = findViewById(R.id.weight1));

if(tvGrade1.getText() == null || tvWeight1.getText() == null)
    //one of them is null, do stuff

答案 3 :(得分:-2)

您还可以简单地将整个代码包装在try-catch语句内的onClick()方法中,然后捕获异常并执行必要的任务,或者向用户显示一条吐司错误消息,即他未在两个代码中都输入值字段。