【问题标题】:Data Binding giving NullPointerException when used with static method与静态方法一起使用时出现 NullPointerException 的数据绑定
【发布时间】:2016-09-06 06:42:35
【问题描述】:

当我使用我的StringUtils 类格式化日期时,我得到了一个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 数据库异步获取的。这会导致问题吗?

标签: android data-binding android-databinding


【解决方案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;
    }
}

【讨论】:

  • 我认为这更可取。谢谢!
【解决方案2】:

当你第一次运行它时,user 没有任何价值,直到你从Firebase 数据库中获取它,所以user.date 也将为空。

放置三元:

android:text="@{user.date==null ? `` : StringUtils.getFormattedDate(user.date)}"

【讨论】:

  • 奇怪的是它只是没有给出任何具体的错误,并显示我所有自动生成的绑定类都没有找到。当您输入android:text="@{user.amount}" 时,我遇到了这种类型的错误,其中数量的类型为double。输入android:text="@{String.valueOf(user.amount)}" 编译成功。当您没有收到任何特定错误时就是这种情况。我认为 Android Studio 2.1.3 仍然存在数据绑定错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多