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

问题描述 投票:0回答:2

当我尝试存储从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)
android android-fragments android-intent recycler-adapter
2个回答
0
投票

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

尝试替换这个:

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

有了这个:

BakingAppsDataModel bakingAppsDataModels = args.getParcelable("baking_app");

0
投票

这是因为您对捆绑包的内容不是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);
© www.soinside.com 2019 - 2024. All rights reserved.