我想计算平均成绩,现在我有了基本知识和布局。当<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
答案 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()方法中,然后捕获异常并执行必要的任务,或者向用户显示一条吐司错误消息,即他未在两个代码中都输入值字段。