例外:从意图存储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