例外:从意图存储ArrayList时“无法转换为java.util.ArrayList”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了例外:从意图存储ArrayList时“无法转换为java.util.ArrayList”相关的知识,希望对你有一定的参考价值。

当我尝试存储从Fragment类中的intent中检索的ArrayList时,我得到了一个异常cannot be cast to java.util.ArrayList

现在我使用来自我的适配器的intent将ArrayList传递给我的fragment类。我的片段类将使用Parcelable检索数据并将其存储到对象中,以便我可以将数据用于我的片段类。但问题是,一旦它检索到数据,就会引发异常。是因为我使用了错误的对象来存储我的数据吗?

MainAdapter类:

final Intent intent = new Intent(view.getContext(), DetailActivityFragment.class);
intent.putExtra("baking_app", mbakingAppsDataModels.get(position));
Log.d("onClick mBDM size: ", mbakingAppsDataModels.get(position)+"");
//intent.putExtras(args);
view.getContext().startActivity(intent);

片段类:

Bundle args = getIntent().getExtras();
ArrayList<BakingAppsDataModel> bakingAppsDataModels = args.getParcelable("baking_app");

例外:

FATAL EXCEPTION: main
                                                                             Process: com.example.kavin.bakingapp, PID: 22716
                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kavin.bakingapp/com.example.kavin.bakingapp.ui.DetailActivityFragment}: java.lang.ClassCastException: com.example.kavin.bakingapp.Data.BakingAppsDataModel cannot be cast to java.util.ArrayList
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                                 at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:105)
                                                                                 at android.os.Looper.loop(Looper.java:164)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                                              Caused by: java.lang.ClassCastException: com.example.kavin.bakingapp.Data.BakingAppsDataModel cannot be cast to java.util.ArrayList
                                                                                 at com.example.kavin.bakingapp.ui.DetailActivityFragment.onCreate(DetailActivityFragment.java:30)
答案

您可能会在Intent中传递BakingAppsDataModel类型的Object,因为Method bakingAppsDataModels.get(position)返回一个对象。

尝试替换这个:

ArrayList<BakingAppsDataModel> bakingAppsDataModels = args.getParcelable("baking_app");

有了这个:

BakingAppsDataModel bakingAppsDataModels = args.getParcelable("baking_app");
另一答案

这是因为您对捆绑包的内容不是List而是列表中的项目:

final Intent intent = new Intent(view.getContext(), DetailActivityFragment.class);

// You are adding the item here instead of the List
intent.putExtra("baking_app", mbakingAppsDataModels.get(position));

它应该是:

final Intent intent = new Intent(view.getContext(), DetailActivityFragment.class);

intent.putExtra("baking_app", mbakingAppsDataModels);

以上是关于例外:从意图存储ArrayList时“无法转换为java.util.ArrayList”的主要内容,如果未能解决你的问题,请参考以下文章

当从共享prefs获取时,GSON将先前存储的List转换为LinkedTreeMaps的ArrayList

意图 putExtra ArrayList<NameValuePair>

从通知意图启动活动时重新创建 Android ViewModel

面试重点之从源码分析HashMap和ArrayList在存储扩容等方面的区别

当通过意图从相机应用程序返回时,Android 活动被破坏

ACTION_GET_CONTENT意图不显示外部存储