var bundle = Bundle()
bundle.putParcelable("PHOTO",getItem(holder.adapterPosition))
if(bundle.isEmpty()){
Log.d("TAG", "onBindViewHolder: 空的bundle")
}else{
val a =holder.itemView.findNavController()
a.navigate(R.id.action_galleryFragment_to_photoFragment, bundle )
}
这段代码的作用只要是想将适配器当前对象的位置信息holder.adapterPosition传给bundle,,并且让bundle作为参数,完成从galleryFragemnt 到photoFragment的切换,但是却发生了Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference的错误。
这里的bundle主要是获取从网页获取的json格式的数据,当我打断点进行调试时,发现bundle不为空,但是bundle其中的一个键fullUrl的值为null,所以我就找到了接收网页数据的类,如下
@Parcelize
data class PhotoItem(
@SerializedName("webformatURL") val photoUrl: String,
@SerializedName("id") val photoId: Int,
@SerializedName("largeURL") val fullUrl: String,
): Parcelable
为什么fullUrl会为null呢,最后发现“largerURL”这个键不在网页的json数据中,只有“largeImageURL”存在,当我改了之后,程序就不报错了,这个错误提醒我获取网页数据的时候一定要将键的名称写对,否则就会取不到,发生错误。