0

我目前正在学习 Android 并编写一个应用程序来帮助我完成工作。我使用这个优秀的网站已经有一段时间了,总的来说,经过大量的研究,它帮助我理解了大多数概念。

我想我会问我的第一个问题,因为我确信它会有一个简单的答案 - 以下语句中的逻辑没有按预期工作:

protected void onListItemClick(ListView l, View v, final int pos, final long id){

    Cursor cursor = (Cursor) rmDbHelper.fetchInspection(id);
    String inspectionRef = cursor.getString(cursor.getColumnIndex(
            RMDbAdapter.INSPECTION_REF));
    String companyName = cursor.getString(cursor.getColumnIndex(
            RMDbAdapter.INSPECTION_COMPANY));

    if (inspectionRef == null && companyName == null){
        inspectionDialogueText = "(Inspection Reference unknown, Company Name unknown)";    
    }
    else if (inspectionRef != null && companyName == null) {
        inspectionDialogueText = "(" + inspectionRef + ", Company Name unknown)";
        }
    else if (inspectionRef == null && companyName != null) {
        inspectionDialogueText = "(Inspection Reference unknown, " + companyName + ")";
    }
    else {
        inspectionDialogueText = "(" + inspectionRef + ", " + companyName + ")";
    }

我不确定我是否应该在 if 语句中使用 null 或 "" 但无论哪种方式它都不起作用,因为它只打印inspectionRef 和 companyName 而不管它们是否包含任何内容..

对不起,如果我只是一个笨蛋!

非常感谢,

大卫

4

1 回答 1

3

Android 有一个很好的实用方法来检查空 ( "") 和null Strings

TextUtils.isEmpty(str)

它只是(str == null || str.length() == 0)但它为您节省了一些代码。

如果要过滤掉仅包含空格 ( " ") 的字符串,可以添加trim()

if (str == null || str.trim().length() == 0) { /* it's empty! */ }

如果您使用的是 Java 1.6 str.length() == 0,则可以替换为str.isEmpty()

例如,您的代码可以替换为

if (TextUtils.isEmpty(inspectionRef)){
    inspectionRef = "Inspection Reference unknown";
}
if (TextUtils.isEmpty(companyName)){
    companyName = "Company Name unknown";
}
// here both strings have either a real value or the "does not exist"-text
String inspectionDialogueText = "(" + inspectionRef + ", " + companyName + ")";

如果你在你的代码中使用那段逻辑,你可以把它放在一些实用方法中

/** returns maybeEmpty if not empty, fallback otherwise */
private static String notEmpty(String maybeEmpty, String fallback) {
    return TextUtils.isEmpty(maybeEmpty) ? fallback : maybeEmpty;
}

并像使用它一样

String inspectionRef = notEmpty(cursor.getString(cursor.getColumnIndex(
        RMDbAdapter.INSPECTION_REF)), "Inspection Reference unknown");
String companyName = notEmpty(cursor.getString(cursor.getColumnIndex(
        RMDbAdapter.INSPECTION_COMPANY)), "Company Name unknown");

inspectionDialogueText = "(" + inspectionRef + ", " + companyName + ")";
于 2012-08-17T12:30:38.303 回答