2010-09-29 46 views
3

我正在編寫一個Android應用程序,用於顯示我們電話線路狀態的工作,但那不是在這裏或那裏。ANDROID:If ...否則作爲開關字符串

我打電話給我們的服務器之一,並獲得狀態的返回JSON文本。然後我解析這個把每行放到一個SortedMap(TreeMap)中,Key是行的名字,我自己的類是值(它保存狀態和其他細節)。

這一切工作正常。

當應用程序運行時,它應該顯示每一行和我檢索的信息,但沒有更新。

JSON返回並正確添加到地圖。

這是不工作的代碼的快照。我只是遍歷地圖,並根據鍵的值更新相關的TextView。我遇到的問題是,當它到達匹配它的IF語句時,它永遠不會運行該代碼。它跳過它,就好像值不匹配一樣。

我看不到任何錯誤。這是唯一的方法來做到這一點,因爲我知道你不能使用Switch..Case等?

任何人都可以看到我的錯誤?我已經在Android上編了一個星期了,所以它可能是一個新手錯誤!

感謝 尼爾

Iterator iterator = mapLines.entrySet().iterator(); 

while(iterator.hasNext()) 
{ 
// key=value separator this by Map.Entry to get key and value 
Map.Entry<String, Status> mapEntry = (Map.Entry<String, Status>)iterator.next(); 

// getKey is used to get key of Map 
String key = (String)mapEntry.getKey(); 

// getValue is used to get value of key in Map 
Status value = (Status)mapEntry.getValue(); 

if(key == "Ski") 
{ 
    TextView tvStatus = (TextView)findViewById(R.id.SkiStatus); 

    tvStatus.setText(value.Status); 
} 
else if(key == "Cruise") 
{ 
    TextView tvStatus = (TextView)findViewById(R.id.CruiseStatus); 

    tvStatus.setText(value.Status); 
} 
else if(key == "Villas") 
{ 
    TextView tvStatus = (TextView)findViewById(R.id.VillasStatus); 

    tvStatus.setText(value.Status); 
} 
} 

回答

20

必須使用equals()在Java中比較String對象。如果兩個對象String類的同一個實例,不比較它們的實際內容,否則你只是比較:

if (key.equals("Ski")) { 
    ... 
} 

或者,以避免NullPointerException如果key可能是null

if ("Ski".equals(key)) { 
    ... 
} 
+1

@neildeadman - 嚴格使用Joachims的第二種模式。你必須使用不同的一天,你會知道爲什麼。但是在接下來的幾年裏不會發生這種情況;-) – 2010-09-29 09:30:34

1

用字符串文字「Ski」檢查鍵,你可以像下面一樣使用。這將防止空指針異常。

if ("Ski".equals(key)) 
{ 
    ... 
} 
+0

呃......我在最初的回答中已經提到過。 – 2010-09-29 09:29:51

+0

@Sauer對不起,快速打字給了一票。 ;) – 2010-09-29 09:32:23

4

我更喜歡在這種情況下使用地圖,因爲它們消除了重複代碼的需要,而且如果其他構造消除了冗長的話。我不知道這段代碼在代碼中的哪個位置,所以這可能不適用於您的情況,只是提及它而已。

使用地圖爲您的字符串獲取正確的資源並設置狀態。

的代碼會是這個樣子:

首先初始化地圖:

Map<String, Integer> textViews = new HashMap<String, Integer>(); 
textViews.put("Ski", R.id.Ski); 
textViews.put("Cruise", R.id.Cruise); 
textViews.put("Villas", R.id.Villas); 

然後檢索正確的ID和設置文本:

((TextView) findViewById(textViews.get(key))).setText(status); 

這將減少大如果其他構建很多,添加一個文本視圖就像更改地圖一樣簡單。