Android intent.getParcelableArrayListExtra on ArrayList 引发<LatLng> Nullpointer 异常



我试图将LatLng对象的数组列表传递给另一个活动。该方法在Util类中定义,而Util类不是活动。但接收活动总是提高NullpointerException

class Utils {
companion object {
fun startMaps(pairs: MutableList<LatLng>){
var intent = Intent(AAddressActivity.appContext, MapActivity::class.java)
Log.d("pair", ArrayList(pairs).toString())
Log.d("pair", ArrayList(pairs)[0].toString())
intent.putParcelableArrayListExtra("key", ArrayList(pairs))
AAddressActivity.appContext.startActivity(intent)
}
}

Log.d打印非空的对的内容。///AAddressActivity.appContext,其中AAddressActivity是调用Utils.startMap()方法的活动,appContext定义为

companion object{
lateinit  var appContext: Context
}

,并在onCreate() AAddressActivity中初始化为appContext=this,以允许外部访问AAddressActivity的上下文。
这是接收活动:

class MapActivity : AppCompatActivity(), OnMapReadyCallback {
lateinit var latLngList: ArrayList<LatLng>
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)

// Error happens here
latLngList = intent.getParcelableArrayListExtra("key", LatLng::class.java)!!
Log.d("longMap", latLngList[0].toString())
}

错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidapplicationproject/com.example.androidapplicationproject.mapUtil.MapActivity}: 
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Class.isInterface()' on a null object reference

据我所知,LatLng对象实现了Parcelable,所以我不应该担心这个。但是为什么会发生错误呢?我怎么修理它。

我刚刚发现,如果pairs中只有一个元素,那么MapActivity可以成功接收包裹,但如果列表中有两个或更多元素,则会引发异常。

我重现了这个问题,由于代码似乎没有任何问题,我在谷歌上搜索了"parcelablearraylist "发现Reddit上有一条评论链接到这个bug报告,其中一位谷歌工程师承认这是一个bug。

那么回答这个问题:

但是为什么会发生错误?

接受Class参数的新方法有一个bug。

如何修复

坚持使用不接受Class参数的旧方法(如getParcelableArrayListExtra),直到错误被修复或他们发布了一个可以正常工作的API的比较版本。

最新更新