有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android文件为且不为空

这是我描述发生了什么的最好方式

这是我的代码行:

if (offer.getFamily().getProfileImage() == null)

这就是调试器显示的内容: enter image description here

优惠和家庭都不是空的

因此,它不应该像应该的那样进入if,而是尝试获取文件路径,当然,它会失败,出现NullPointerException

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
             at java.io.UnixFileSystem.resolve(UnixFileSystem.java:95)
             at java.io.UnixFileSystem.resolve(UnixFileSystem.java:130)
             at java.io.File.getAbsolutePath(File.java:524)
             at com.yournanny.utilities.ProfileImageUtilities.showProfileImage(ProfileImageUtilities.java:109)

下面是我得到错误的地方:

public static void showProfileImage(User user, ImageView image) {
    image.setImageBitmap(BitmapFactory.decodeFile(user.getProfileImage().getAbsolutePath()));
}

这是怎么回事


更新

查看这些注释,我打破了这些链并重新运行它,无论是offer还是getFamily()都不会返回null,如果我对它们调用其他方法,我就会得到预期的值

但是getProfileImage()肯定返回null,问题是当我在if中比较它时,它还不够null

但是打电话给getProfileImage().getAbsolutePath()我得到了这样的信息: enter image description here


共 (2) 个答案

  1. # 1 楼答案

    File是非空的,但它的name在内部是空的

  2. # 2 楼答案

    显然,问题在于offer的反序列化(尤其是其中的family

    我通过一个改装的get电话得到了offer

    我在profileImage属性中添加了transient,解决了这个问题:

    private transient File profileImage;

    下面是调试器显示的内容:

    enter image description here

    所以我猜gson(我用它来反序列化改造响应)在创建一个文件时没有给它分配路径,这就是为什么它是空的,而不是空的

    但是一个恰当的解释会很好