2016-12-28 128 views
0

我比較處理程序的消息,以確定根據消息做什麼: 但不知何故,當消息是「1」時,比較仍然列出m ==「1」爲false怎麼樣?Android:比較處理程序的消息

​​

+1

你應該爲這些目的使用'Message#what'字段,文檔說:*用戶定義的消息代碼,以便接收者可以識別這個消息是關於什麼的。每個Handler都有自己的消息代碼的名稱空間,所以你不必擔心你與其他處理器發生衝突。* – pskink

+0

如果你使用'obj'來傳遞數據,你應該使用'Message#obtain(Handler h ,int what,Object obj)'或'Handler#obtainMessage(int what,Object obj)'來獲得你想發送的'Message' – pskink

回答

2

的問題是,如果兩個對象共享相同的內存地址,您比較。而你應該比較兩個對象的內容。

解決方案:使用String.equals來比較您的字符串值的內容。

if("1".equals(m)){ 

} 

注1:因爲真正的值進行比較,而不是存儲地址對於基本類型(int,雙,浮點型,短和字節)==將工作。對於對象(非基元),==總是比較兩個對象的內存地址。

注2: @pskink做了一個非常有用的評論,你的確應該使用Message.what而不是Message.objMessage.obj對於傳送所需的實際數據(在同一個過程中)是有用的,但不能識別消息本身。

1

你如果條件應該是這樣的

if(m==1) //is for int 

if(m.equals("1")) //is for string