【问题标题】:Passing data object via intent通过意图传递数据对象
【发布时间】:2018-09-11 11:38:21
【问题描述】:

我想通过意图将一个对象从一个活动传递到另一个活动。但我得到这个错误

新哈希 0 位于数组哈希 3552645 的末尾之前,索引 1 键为空

活动一:

Intent intent = new Intent(Activity1.this, activity2.class); 
intent.putExtra("mission", mission); 
intent.putExtra("task", task); 
startActivity(intent); 

活动二:

Intent intent = getIntent();
mission = intent.getParcelableExtra("mission"); 
task = intent.getParcelableExtra("task");

这是我的日志:

新的哈希 0 在数组哈希 3552645 的结尾之前,索引 1 键为空 java.lang.RuntimeException:这里 在 android.util.ArrayMap.append(ArrayMap.java:521) 在 android.os.Parcel.readArrayMapInternal(Parcel.java:2618) 在 android.os.BaseBundle.unparcel(BaseBundle.java:221) 在 android.os.Bundle.getParcelable(Bundle.java:786) 在 android.content.Intent.getParcelableExtra(Intent.java:6223) 在 com.iperiatech.sams.mvp.Missions.TaskDetailActivity.onCreate(TaskDetailActivity.java:82) 在 android.app.Activity.performCreate(Activity.java:6877) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3208) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3351) 在 android.app.ActivityThread.access$1100(ActivityThread.java:222) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1796) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7230) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • 你的对象是 Parcelable 吗?
  • 是的,可以打包
  • 我认为您的问题是您的 parcelunparcel 方法不一致。请发布这些方法,我们可以看看。或者您可以自己查看它们。

标签: android android-intent


【解决方案1】:

试试这个

Intent intent = new Intent(activity1.this, activity2.class);
Bundle args = new Bundle();
args .putSerializable("mission",(Serializable) mission); 
args.putSerializable("task",(Serializable) task); 
intent.putExtra("DATA", args);
startActivity(intent);

并像这样接收

  Intent myIntent = getIntent();
  Bundle myBundle = myIntent.getBundleExtra("DATA");

  if (myBundle != null) {
      mission = myBundle.getSerializable("mission"); 
      task = myBundle.getSerializable("task");

  }

【讨论】:

  • 我正在尝试实现 Parcelable,它与 Android 的相关性高于 Serializable,您的解决方案使用 Parcelable 作为 Serializable 的工作方式是否相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2012-11-22
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多