空集可见性的值

时间:2015-08-25 14:18:14

标签: android

我遇到了一个字段问题。该字段可以作为null存储在数据库中。在我的一个视图中,我可以显示我的不同数据对象,如果它为null,则隐藏TextView元素。否则,该值将被给出并显示在视图中。

我的对象:

RowItem [nombre=Felipe Meric, ticket=Cancha VIP, asiento=Fila C - Asiento 10, numero=null, imageId=0, id_inscripcion=945, hash=DE1FB0B4E28D4A066C89D27A, validado=0, adicionales=null, otros=null, categoria=null]

错误:

08-25 11:13:54.445: E/AndroidRuntime(29927): FATAL EXCEPTION: main
08-25 11:13:54.445: E/AndroidRuntime(29927): java.lang.NullPointerException
08-25 11:13:54.445: E/AndroidRuntime(29927):    at com.google.zxing.client.android.CustomListViewAdapter.getView(CustomListViewAdapter.java:137)

第137行:

if (!rowItem.getCategoria().equals("") && !rowItem.getCategoria().equals("null") && rowItem.getCategoria() != null || !rowItem.getCategoria().isEmpty()) {
     holder.txtCategoria.setText(Html.fromHtml("Categoría: <b>"+rowItem.getCategoria()+"</b>"));
     holder.txtCategoria.setVisibility(View.VISIBLE);
}

我使用几个不会发生错误的字段执行此过程,与此形成对比,由于某种原因会出错。

1 个答案:

答案 0 :(得分:2)

您无法在空引用上调用equals。为此,有一个方法TextUtils.isEmpty()

例如

WHERE LAST_DAY(service_time + INTERVAL 
      CEIL(times_year * TIMESTAMPDIFF(MONTH, service_time, CURDATE()) / 12.0)*
      (12 DIV times_year) MONTH) <= LAST_DAY(CURDATE())

您的代码可以更新为以下内容。

String item = null;
item.isEmpty() // Throws NullPointerException
item.equals("") // Throws NullPointerException
"".equals(item) // Returns false
TextUtils.isEmpty(item) // Returns true

item = ""
item.isEmpty() // Return true
item.equals("") // Returns true
"".equals(item) // Returns true
item.isEmtpy() // Returns true;
TextUtils.isEmpty(item) // Returns true

然而&#34; null&#34; != null。我不会检查字符串值==&#34; null&#34;并且只需执行以下操作。

if (!TextUtils.isEmpty(rowItem.getCategoria() && !"null".equals(rowItem.getCategoria()) {
     holder.txtCategoria.setText(Html.fromHtml("Categoría: <b>"+rowItem.getCategoria()+"</b>"));
     holder.txtCategoria.setVisibility(View.VISIBLE);
}