最近我正在开发一个应用程序,以在数组适配器中显示一些文件信息。
所以我的代码看起来像这样:
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和案例中获得了不同的结果。 3和2
如果是1和3,我的预期结果为
但在案例2中,我得到的是:“mime / type”(没有附加“目录Mime类型:”!!!) 在某些情况下,当mimetype为null时,我得到一个NULL指针异常 有人请解释我在这里发生的事情。
答案 0 :(得分:2)
此表达式中的运算符优先级问题
"Directory Mime Type : " +
itemSelectedFile.getMimeType() != null ?
itemSelectedFile.getMimeType() : ""
三元运算符(?
)的优先级低于+
和!=
。
这意味着表达式实际上与此相同:
(("Directory Mime Type : " +
itemSelectedFile.getMimeType()) != null) ?
itemSelectedFile.getMimeType() : ""
答案 1 :(得分: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()之前,你必须检查它。