Java Android文件是和非';t空
这是我描述发生了什么的最好方式 这是我的代码行:Java Android文件是和非';t空,java,android,nullpointerexception,Java,Android,Nullpointerexception,这是我描述发生了什么的最好方式 这是我的代码行: if (offer.getFamily().getProfileImage() == null) 这就是调试器显示的内容: 优惠和家庭都不是空的 因此,它没有进入if-like-should中,而是尝试获取文件路径,当然,它会失败,出现NullPointerException java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.
if (offer.getFamily().getProfileImage() == null)
这就是调试器显示的内容:
优惠和家庭都不是空的
因此,它没有进入if-like-should中,而是尝试获取文件路径,当然,它会失败,出现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()
时,我发现:
显然,问题在于
产品的反序列化(尤其是其中的系列)
我通过一个改装的get电话获得了优惠
我在profileImage
属性中添加了transient
,解决了这个问题:
私有瞬态文件profileImage代码>
下面是调试器显示的内容:
所以我猜gson(我用它来反序列化改造响应)在创建一个文件时没有给它分配路径,这就是为什么它是空的,而不是空的
但是一个恰当的解释会很好。很显然,问题在于产品的反序列化(尤其是其中的系列)
我通过一个改装的get电话获得了优惠
我在profileImage
属性中添加了transient
,解决了这个问题:
私有瞬态文件profileImage代码>
下面是调试器显示的内容:
所以我猜gson(我用它来反序列化改造响应)在创建一个文件时没有给它分配路径,这就是为什么它是空的,而不是空的
但是一个恰当的解释是很好的。这个文件
是非空的,但是它的名称
在内部是空的。这个文件
是非空的,但是它的名称
在内部是空的。你在哪里调用isEmpty()
或者getAbsolutePath()
?我猜肯定是空的。可能您看到的是错误的代码部分。您能为我们列出完整的异常堆栈跟踪,并告诉我们它抱怨代码中的哪一行吗?我假设offer
,或getFamily()
为空。在这种情况下,我通常会断开方法调用链,逐个执行它们,捕获中间变量以供调试器或记录器检查。这还可以确定引发异常的语句。它对优化也有影响。另外,检查一下你的方法是否有副作用。我不认为这里有什么是空的。由于从不正确或不存在的文件加载的文件,getProfileImage()中的“路径”很可能为空。您在哪里调用isEmpty()
或getAbsolutePath()
?我猜肯定是空的。可能您看到的是错误的代码部分。您能为我们列出完整的异常堆栈跟踪,并告诉我们它抱怨代码中的哪一行吗?我假设offer
,或getFamily()
为空。在这种情况下,我通常会断开方法调用链,逐个执行它们,捕获中间变量以供调试器或记录器检查。这还可以确定引发异常的语句。它对优化也有影响。另外,检查一下你的方法是否有副作用。我不认为这里有什么是空的。由于从不正确或不存在的文件加载的文件,getProfileImage()中的“路径”很可能为空。如果不共享代码,您将是唯一能够回答问题的人。在查看文件系统时,尝试单步执行User
方法。祝你好运@QED我想这可能是标准的Gson响应,在反序列化时不接收某个字段而不共享代码,您是唯一能够回答您问题的人。在查看文件系统时,尝试单步执行User
方法。祝你好运@QED我认为这可能是标准的Gson响应,在反序列化时没有收到某个字段