1. 程式人生 > >筆記34--ProgressDialog呼叫dismiss()不消失、null是什麼(dead code問題)

筆記34--ProgressDialog呼叫dismiss()不消失、null是什麼(dead code問題)

知識補充:android開發中將十六進位制顏色程式碼轉換為int型別數值方法 : Color.parseColor("#00CCFF") 返回 int 數值;

1、null是什麼:null雖然能代表一個不確定的物件,但null本身不是物件,也不是Object的例項。

今天在程式碼中遇到個問題:


沒錯,就是dead code(死程式碼,即不會執行的程式碼)。需明確幾個問題:

1)str為null時,若呼叫str的函式,則會報異常。

2)判斷str是否為null,應該用str==null

OK,繼續:當執行第一個if語句時,若str為null,將直接丟擲異常,不再執行下面的判斷條件,所以下面語句不會執行。

改正方法,只需把第二個if語句移到第一個if語句之前。所以,在判斷字串是否為null時,應該放在第一條,放棄其他判斷條件的前面。

2、ProgressDialog

先說兩種正確的呼叫方式:

1)<span style="white-space:pre">	</span>Private ProgressDialog pd;
	pd=new ProgressDialog(this);
	pd.setMessage("就是這麼帥");
	pd.show();
//	pd.setCancelable(false);
//	pd.setCanceledOnTouchOutside(false);
	pd.dismiss();
2)<span style="white-space:pre">	</span>Private ProgressDialog pd;
	pd=pd.show(this, null, "咋就這麼帥");
//	pd.setCancelable(false);
//	pd.setCanceledOnTouchOutside(false);
	pd.dismiss();
再說一種錯誤的方式:
<span style="white-space:pre">	</span>Private ProgressDialog pd;
	pd=new ProgressDialog(this);
	pd.show(this, null, "咋就這麼帥");
//	pd.setCancelable(false);
//	pd.setCanceledOnTouchOutside(false);
	pd.dismiss();
此種方式ProgressDialog並不消失,雖然你很確定已經執行dismiss()。

說說原因:pd.show()函式返回void,而pd.show(context, title, message)函式返回ProgressDialog。意味著:show()並不生成新的ProgressDialog物件,而show(context, title, message)返回一個新的ProgressDialog物件。則當你呼叫完pd=new ProgressDialog(this);之後再呼叫pd==pd.show(this, null, "咋就這麼帥");則會生成兩個ProgressDialog物件,而只有一個引用。第一個物件將不會再被引用到,所以不會消失。