ANDROID:If ... Else as Switch on String

时间:2010-09-29 09:19:53

标签: java android

我正在编写一个Android应用程序,用于显示我们的电话线的状态,但这不是在这里,也不在那里。

我打电话给我们的一个服务器并获得状态的JSON文本。然后我解析这个把每一行放到一个SortedMap(TreeMap)中,Key是行的名称,我自己的类作为值(保存状态和其他细节)。

一切正常。

当应用程序运行时,它应显示每行以及我检索到的信息,但不会更新任何内容。

返回JSON并正确添加到Map中。

这是无效代码的快照。我只是遍历地图并根据键的值更新相关的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);
}
}

3 个答案:

答案 0 :(得分:20)

您必须使用equals()来比较Java中的String个对象。否则,您只需比较两个对象是否与String的实例相同,并且不比较它们的实际内容:

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

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

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

答案 1 :(得分:4)

在这种情况下,我更喜欢使用地图,因为它们不需要重复的代码和if if else结构。我不知道你的代码在哪里发生这个代码片段所以这可能不适用于你的情况,只是提一下。

使用Map获取String的正确资源并设置状态。

代码看起来像这样:

首先初始化地图:

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);

这会减少很多if if构造很多,添加textview就像更改地图一样简单。

答案 2 :(得分:1)

用字符串文字“Ski”检查键,你可以使用如下。这将防止nullpointer异常。

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