2012-02-08 44 views
-2

我有一个奇怪的错误。当偏好改变时,我会比较偏好更改。字符串比较失败 - 共享首选项密钥

当首选项发生变化时,它会给我一个已更改密钥的字符串。

我已经列出了IF语句来检查哪些语句发生了变化并更新了当前的首选项(性能等,因为我们不能使用sharedprefs onDestory,所以我们必须一次完成一个..)

无论如何其他键正在工作,但这似乎最终失败。在这里:

首先我们有XML:(PS这个功能改变了位图的大小在应用程序内)

这是values.xml

<string-array name="itemSize"> 
    <item>Small</item> 
    <item>Medium</item> 
    <item>Large</item> 
</string-array> 
<string-array name="itemSizeNumbers"> 
    <item>8</item> 
    <item>12</item> 
    <item>18</item> 
</string-array> 

这是内内settings.xml中

<ListPreference 
    android:title="Item Size" 
    android:summary="Set the Item size." 
    android:key="ItemSize" 
    android:defaultValue="Medium" 
    android:entries="@array/ItemSize" 
    android:entryValues="@array/ItemSizeNumbers" 
/> 

当偏好发生变化,该功能被称为:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
    { 
     if(started) 
     { 
      _battlefield.upDateValues(key); 
     } 
    } 

这传递到:(可能是哪里出了问题)

public void upDateValues(String key) 
{ 
      //This returns ItemSize on item size change. 
    Log.w("myapp", key); 
    String nkey = key; 

    if(nkey == "Items") 
    { 
        //This one works 
     this._no_of_Items = this.prefs.getInt("Items", 4); 
    } 

    if(nkey == "respawn") 
    { 
        //This one works 
     this._respawn_time = this.prefs.getInt("respawn", 1); 
    } 

      //The fail zone. 
    if(nkey == "ItemSize") 
    { 
        //This one does not work! Key outputs ItemSize ???? 
     Log.w("myapp", "Item size activated"); 

     this._items_screen_percentage = this.prefs.getInt("ItemSize", 10); 

     this.initializeBitmaps(); 

     //this.initialize(_context, _surfaceHolder, prefs); 
    } 
} 
+4

和提示的第一百万个问题'为什么比较==字符串'失败。我的意思是,这不像是这个网站的“常见问题”列表中的第一点..哦,等待 – Voo 2012-02-08 21:06:42

+0

虽然共享首选项可能有一些waryid数组,但都是来自它的XML变量。 – 2012-02-08 21:14:05

回答

1

你应该使用字符串的内容比较equals方法。

if (str1.equals(str2)) { 
     ... 
} 

到这里看看:

http://www.zparacha.com/java-string-comparison/

+0

谢谢。这已经解决了我的问题。 – 2012-02-08 21:15:53

+0

我确实。我刚读到有什么不同。 “==”是引用一个内存位置,equals是实际的文本。 (对于有同样问题的其他人) – 2012-02-08 21:21:09