2016-04-03 44 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'值。所以這種情況只是爲了安全。感謝你的回答。 :) –