与静态方法一起使用时数据绑定给出 NullPointerException
Data Binding giving NullPointerException when used with static method
当我用 StringUtils
class 格式化日期时,我得到了一个 NullPointerException
。如果我在没有 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}" />
没有报错,屏幕上显示了日期!
我已尝试清理项目并重新运行。但是没有成功。
当你第一次 运行 它 user
没有任何价值,直到你从 Firebase
数据库中获取它,所以 user.date
也将为空。
输出三元:
android:text="@{user.date==null ? `` : StringUtils.getFormattedDate(user.date)}"
数据绑定本身是空值安全的,但这不适用于将值用作参数。由于 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;
}
}
当我用 StringUtils
class 格式化日期时,我得到了一个 NullPointerException
。如果我在没有 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}" />
没有报错,屏幕上显示了日期!
我已尝试清理项目并重新运行。但是没有成功。
当你第一次 运行 它 user
没有任何价值,直到你从 Firebase
数据库中获取它,所以 user.date
也将为空。
输出三元:
android:text="@{user.date==null ? `` : StringUtils.getFormattedDate(user.date)}"
数据绑定本身是空值安全的,但这不适用于将值用作参数。由于 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;
}
}