当我用NullPointerException
课程格式化日期时,我收到StringUtils
。如果我在没有StringUtils
的情况下使用它,它就可以正常工作。
我添加了StringUtils
我有这个:
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@{StringUtils.getFormattedDate(user.date)}" />
这使我的StringUtils
方法出错:
public static String getFormattedDate(String unformattedDate) {
// unformattedDate will be in format of yyyy-mm-dd
// Convert it to d mmm, yyyy
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String date = null;
try {
Date d = df.parse(unformattedDate); // <<--------- Here
SimpleDateFormat dateFormat = new SimpleDateFormat("d MMM, yyyy");
date = dateFormat.format(d.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
当我使用调试器检查时,unformattedDate
从一开始就是null
。调用了正确的方法,但传递的值为null
。这很奇怪。
当我在布局文件中使用它时:
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@{user.date}" />
它没有给我任何错误,日期显示在屏幕上!
我已经尝试清理项目并重新运行它。但没有成功。
答案 0 :(得分:1)
当您第一次运行时user
没有任何值,直到您从Firebase
数据库获取它,因此user.date
也将为空。
放三元:
android:text="@{user.date==null ? `` : StringUtils.getFormattedDate(user.date)}"
答案 1 :(得分:1)
数据绑定本身是空安全的,但这并不适用于将值用作参数。由于getFormattedDate()
是您的更改,因此请确保它也是无效的。如果还有ParseException
,您已经返回null。
public static String getFormattedDate(String unformattedDate) {
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = df.parse(unformattedDate);
SimpleDateFormat dateFormat = new SimpleDateFormat("d MMM, yyyy");
return dateFormat.format(d.getTime());
} catch (Exception e) {
Log.w("StringUtils", "getFormattedDate", e);
return null;
}
}