Android文本字符串比较

时间:2012-12-13 18:23:06

标签: android string simplecursoradapter

在自定义SimpleCursorAdapter中,我正在尝试比较状态字符串,结果令人困惑。

我的字符串是从光标初始化的(我已用toast检查它是否包含预期的值)。

String visitStatus = cursor.getString(cursor.getColumnIndex(CallData.COLUMN_VisitStatus));

visitStatus可以为null,Open,Cancelled或Complete。

如果我尝试将visitStatus与“引号中的任何字符串”进行比较,则应用程序会因NullPointerException而崩溃。只有当我与null比较时,我才能得到任何东西 - 这对我没用;

if(visitStatus.equals(null)) // the app crashes with a NullPointerException
if(visitStatus == null) // doesn't crash
if(visitStatus != null) // doesn't crash
if(visitStatus == "Complete") // doesn't crash or do anything
if(visitStatus.equals("Complete")) // the app crashes with a NullPointerException.

基本上,我可以比较null,但只能以不应该工作的方式进行比较。我无法与实际字符串比较,例如“打开”或“完成”。

我对此略显坚定,并且严重错过了我的C#舒适区。这个特定的活动是listfragments,contentproviders,customadapters,viewpagers,pagertitlestrips和list row xml templates的噩梦!

HALP!

2 个答案:

答案 0 :(得分:3)

这是因为visitStatusnull。每当您尝试访问其方法时,它都会崩溃。 (即:visitString.equals()visitString.length()等,一切都会崩溃。

但是,等于运算符(==)在其两侧都支持null个参数。 (因此,if (null == null)是有效的检查。)

你应该这样检查:

if (visitStatus != null && visitStatus.equals("Complete")) {
    // ...
}

或者,您可以执行“Yoda语法”(向后检查),它支持null个参数:

if ("Complete".equals(visitStatus)) {
    // ...
}

另外,最后一点:您无法使用==比较字符串内容(例如,您不能"a" == new String("a"),也不能visitString == "Complete")。有关详细说明,请参阅this Q&A thread

答案 1 :(得分:0)

应使用String

比较

.equals()

由于NullPointerExceptionvisitStatus

而导致null