2016-04-03 43 views
0

嗨,我是初学者编程。我正在尝试从udacity学习Android开发。为什么在继续之前检查所有条件?

Cursor cur = someFunction(); 
    if(cur != null){ 
    Intent intent = new Intent(getActivity(), two.class); 
    intent.setData(cur.getLong(2)); 
    startActivity(intent) 
} 

现在分为两节课。

Intent intent = getActivity.getIntent(); 
if(intent != null){ 
    mString = intent.getDataString(); 
} 

if(null != mString){ 
    mTextView.setText(mString); 
} 

我只是想知道为什么我们在这个代码需要这么多if秒。第一段代码中的if很好。

当从第一个活动调用第二个活动。为什么我们需要检查意图是否为空?因为它是第二项活动的唯一入口。
为什么我们再次需要检查字符串是否为空,然后将它分配给Text View

+0

嗯,你在技术上并不需要检查,如果他们是'null'只是一个安全检查。几乎没有降低表现。 – 3kings

回答

1

仅仅因为你在某些代码中看到它,这并不意味着它是必需的。

在第一个条件下检查null是没有必要的。这里的代码看起来像是非常偏执getIntent()可能返回null。

在第二种情况下,没有任何内容告诉编译器确保返回字符串肯定不为空。实际上,文档指出它可能返回null,因此总是检查是安全的。您可以将一个空字符串放入TextView中,但这不一定是您想要的。没有上下文很难说。

+0

'在第二种情况下,没有任何东西告诉编译器确保返回字符串肯定不为空。“但是由于我们在开始活动之前已经设置了数据。为什么我们在执行'getDataString()'后再次检查? –

+0

你不*有*做任何事情。这是一个安全检查。我们无法确定这里是否完全安全,因为没有足够的上下文来查看所有情况。即使它一直非常安全,未来可能会有所改变。 –

+0

因为在将来某个时候您可能会启动该活动并忘记设置该数据。它更好地失败而不是崩溃。它的概念叫做“防御性编程”,它是一个非常重要的学习程序,假设某些事情会出错,因为它最终会出错。 –

0

因为如果你不检查某些东西是否为null并尝试调用它上面的方法,它将导致NullPointerException。这就是为什么你确认之后才是Intent不为空,则可以调用该方法

intent.getDataString(); 
+0

我明白它可以给出一个'NullPointerException'。然而,我想知道的是,为什么自从我们开始第一个活动的活动起,它就会给这个意图赋予“空值”,这是该活动的唯一入口点。因此,逻辑上它应该为'intent'变量分配一个'INTENT'。但后来我明白,由于某些技术问题,它可能会给'intent'变量赋予'null'值。所以这种情况只是为了安全。感谢你的回答。 :) –