2012-08-17 177 views
0

我目前正在學習Android並編寫一個應用程序來幫助我完成工作。我一直在使用這個優秀的網站已經有一段時間了,經過大量的研究後,它幫助我理解了大多數概念。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,無論它們是否包含任何東西。

對不起,如果我只是一個笨蛋!

非常感謝,

大衛

+1

你也應該檢查的isEmpty == NULL檢查 – nandeesh 2012-08-17 11:52:38

回答

3

Android有一個很好的utility method檢查都是空的("")和nullStrings

TextUtils.isEmpty(str) 

它只是(str == null || str.length() == 0),但它可以節省您的一些代碼。

如果您想篩選出只包含空白(" ")字符串,你可以添加一個trim()

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

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

你的代碼可以用於示例被替換爲

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 + ")"; 
+0

後嗨Zapl,謝謝你的詳細回覆。今晚我會和你一起去的。會給你的anwser添加一個勾號,但我還沒有代表!乾杯,戴夫。 – Scamparelli 2012-08-20 10:39:54