2013-08-27 30 views
0

最近,我正在研究一個應用程序以顯示數組適配器中的某些文件信息。Java中的字符串追加操作符

所以我的代碼如下所示:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) 
     .setIcon(R.drawable.ic_launcher).setTitle("Details"); 
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
     DriveActivity.this, android.R.layout.select_dialog_item); 
// Case 1 
String DIR_NAME = "Directory Name : " + 
     (itemSelectedFile.getTitle() != null ? itemSelectedFile.getTitle() : ""); 

arrayAdapter.add(DIR_NAME); 
// Case 3 
arrayAdapter.add(("Directory Md5 Checksum : " + 
        (itemSelectedFile.getMd5Checksum() != null ? 
         itemSelectedFile.getMd5Checksum(): "").toString())); 

// Case 2 
arrayAdapter.add("Directory Mime Type : " + 
       itemSelectedFile.getMimeType() != null ? 
        itemSelectedFile.getMimeType() : ""); 

正如你可以看到我添加項目到ArrayAdapter有三個主要途徑:

  1. 通過使一個串出的區段列的。
  2. 通過在ArrayAdapter的parametrized add()方法中直接添加兩個字符串,而無需在兩個段上使用toString()方法。
  3. 通過在兩個段上使用toString()方法直接在ArrayAdapter的parametrized add()方法中添加兩個字符串。

我在案例1 & 3和2

得到不同的結果在這兩個1和3的情況下,我得到預期的結果

  1. 目錄名稱:貓
  2. 目錄Md5校驗和:'check_sum'

但在案例2中,我得到這個:「mime/type」(沒有附加「Directory Mime Type:」!!!) 並且在某些情況下當mimetype爲空時,我得到一個NULL POINTER EXCEPTION。
任何人都請解釋我這裏發生了什麼。

+1

你需要檢查是否覆蓋了itemSelectedFile.getMd5C​​hecksum()對象的toString方法.... –

+0

好主意,我會檢查出來。 –

回答

0

你有一個小錯誤。你忘了「()」:

arrayAdapter.add("Directory Mime Type : " + 
      (itemSelectedFile.getMimeType() != null ? 
       itemSelectedFile.getMimeType() : "")); 

你有這些的情況下,2,但萬一3.這就是爲什麼你的代碼等於這些沒有帶:

你有
arrayAdapter.add(("Directory Mime Type : " + 
      itemSelectedFile.getMimeType() != null) ? 
       itemSelectedFile.getMimeType() : ""); 

空指針異常,因爲你的itemSelectedFile = null,我猜。您必須在調用getMimeType()之前檢查它。

+0

嗯是的,這是正確的,實際上我監督字符串連接比三級操作員的處理更高的優先事實。 –

2

正是在這種表達

 "Directory Mime Type : " + 
      itemSelectedFile.getMimeType() != null ? 
       itemSelectedFile.getMimeType() : "" 

三元運算符的優先級的運算符優先級的問題(?)比既+!=更低。

因此,這意味着該表達式實際上意味着與此相同:

 (("Directory Mime Type : " + 
      itemSelectedFile.getMimeType()) != null) ? 
       itemSelectedFile.getMimeType() : ""