我有一些edittexts和一个按钮。 单击该按钮,我使用edittext值执行一些操作。我希望在继续之前检查是否所有edittexts都已填写。所以我在onclick监听器中使用代码
if("".equals(etLandSize.getText().toString()) || null == etLandSize.getText().toString())
{
Toast toast = Toast.makeText(context, text, duration);
toast.show();
return;
}
//followed by some actions.
如果上述条件成立,我希望通过使用'return'返回该方法而不做任何事情。
我的问题是,即使条件成立,执行此条件后的行也会从日志中看到NPE,因为字段为空。
如果我在这个条件之后评论所有行,那么我才会看到预期的Toast,我的活动仍在那里,这是正常行为。
我在这里做错了吗?
另一种方法是我可以将代码置于else {}块中。但只是想知道为什么我不能使用回报。如果我没有意识到一些基本错误,请道歉。
答案 0 :(得分:2)
你的病情看起来很奇怪。
我很确定null == etLandSize.getText().toString()
永远不会成真,我会使用
etLandSize.getText().length() == 0
而不是"".equals(etLandSize.getText().toString()
,因为使用""
来避免与null
进行比较在此处无用 - toString()无法返回null
。
所以试试这个:
if (etLandSize.getText().length() == 0)
{
Toast toast = Toast.makeText(context, text, duration);
toast.show();
return;
}
BTW:如果您的return;
在try {}
块内,则位于finally{}
块中的部分编码将在其后运行。
答案 1 :(得分:1)
如果没有进一步的信息很难回答(这些代码放在哪里?谁叫这个函数?等等......)
作为一项基本规则,当你发现像“返回”这样基本的东西被打破时,它不是问题的原因。您很可能无法在JVM中找到一个非常奇怪的错误。
如果您确定if条件确实是真的,我猜测您的函数被调用两次,并且在其中一个调用中条件不正确。
伊泰。
答案 2 :(得分:-2)
不要在条件块内或方法中间使用return
。始终只在方法结束时使用return。
在你的情况下,把你的//后跟一些动作放在“else”块中。您也可以检查文本,考虑在返回的字符串上使用trim()和length()。