我正在try 将LatLng对象的数组列表传递给另一个活动.该方法是在不是活动的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 AS 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

As far as I know, LatLng object implements Parcelable so I shouldn't worry about that. But why is the error happening? How do I fix it.

I just found that if there are only ONE element in the pairs then the MapActivity can successfully receive the parcel, but if there are two or more elements in the list, the exception raises.

推荐答案

我重现了这个问题,由于代码似乎没有任何错误,我googled for "parcelablearraylist bug"发现this Reddit threada comment链接到this bug report,而谷歌工程师acknowledges it's a bug.

因此,我要回答这个问题:

但为什么会发生这样的错误呢?

这是接受Class参数的新方法的一个错误.

我怎么才能修好它.

坚持使用不接受Class参数(如getParcelableArrayListExtra)的旧方法,直到错误被修复或者它们发布了将正确工作的API的Compat版本.

Android相关问答推荐

listOf(listOf(字符串))在lazyArchitect(lazyStream)中合成

更新画布上的绘图以具有水平填充

ENV变量在gradle进程中没有更新

如何阻止Gradle在编译时生成app-metadata.properties

如何在Android中打印到命令行

插入视图模型时,dagger 未命中绑定错误

没有打开历史记录的活动意向 Select 器完成调用活动

我需要在房间数据库中保留旧的自动迁移行吗?

使用 Gadle kotlin 为多模块 Android 代码库设置 jacoco

如何在Android Studio中禁用文件中的Github用户名引用?

Android Studio 在 list 文件中已经声明了活动类,但仍出现无法找到明确的活动类的错误

Android WebView 不会在滚动端加载新内容

Jetpack Compose - 在屏幕外偏移绘制形状并使用非常大的尺寸

Jetpack Compose with Paging 3 发出太多网络请求

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

喷气背包组成影子奇怪的行为

清洁架构中的服务

Gradle 构建错误:找不到 semver4j-0.16.4-nodeps.jar

在jetpack compose中看不到圆角

Android YouTube SDK - 视频无法在某些 Android 设备中播放