无法通过putExtra将哈希映射发送到新的"活动"



我正在尝试将"HashMap pointMap"这个哈希映射发送到一个新的活动,这是我发送地图的地方,Main2Activity类中的Inoncreate方法

fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(Main2Activity.this, OutActivity.class);
Log.d("Null",dv.getPointMap().toString());
myIntent.putExtra("hashMap", dv.getPointMap());
//pass input int to next activity
Main2Activity.this.startActivity(myIntent);
}
});

这里dv是一个DrawingView类,它扩展了View,它有一个方法调用getPointMap,它返回hashMap

这就是我从下一次活动中收到它的方式

hashMap = (HashMap<Integer , Point>) this.getIntent().getSerializableExtra("hashMap");

在发送之前,我检查了它是否有任何元素,在日志中显示它有元素但我的问题是,当代码运行时,它会给出这个异常

致命异常:main流程:com.example.calaka.myapplication,PID:22046java.lang.RuntimeException:Parcel:无法封送值com.example.chalaka.myapplication.Point@293492bd在android.os.Parcel.writeValue(Parcel.java:1337)在android.os.Parcel.writeMapInternal上(Parcel.java:614)在android.os.Parcel.writeMap上(Parcel.java:598)在android.os.Parcel.writeValue(Parcel.java:1255)在android.os.Parcel.writeArrayMapInternal(Parcel.java:638)在android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313)在android.os.Bundle.writeToParcel(Bundle.java:1096)在android.os.Parcel.writeBundle上(Parcel.java:663)位于android.content.Interent.writeToParcel(Intent.java:7335)在android.app.ActivityManagerProxy.startActivity(ActivityManager Native.java:2485)在android.app.Instrumentation.execStartActivity(Instrumentation.java:1486)在android.app.Activity.startActivityForResult(Activity.java:3796)在android.app.Activity.startActivityForResult(Activity.java:3744)在android.support.v4.app.FragageActivity.startActivityForResult(FragmentActivity.java:784)在android.app.Activity.startActivity(Activity.java:4067)在android.app.Activity.startActivity(Activity.java:4035)在com.example.chalaka.myapplication.Main2Activity$1.onClick(Main2Activity.java:93)在android.view.view.performClick(view.java:4808)在android.view.view$PerformClick.run(view.java:19918)在android.os.Handler.handleCallback(Handler.java:739)在android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:135)在android.app.ActivityThread.main(ActivityThreads.java:5536)位于java.lang.reflect.Method.ioke(本机方法)位于java.lang.reflect.Method.ioke(Method.java:372)在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1397)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:1192)

请帮我解决这个问题。。。

问题是您的类com.example.chalaka.myapplication.Point既没有实现Parcelable也没有实现Serializable

这样做,上面的代码就会如您所期望的那样工作。

从要开始新活动的位置编写此方法:

private void gotoServiceFragment(HashMap<String, String> map) {
Intent gotoService = new Intent(registration.this, Service.class);
gotoService.putExtra(AndyConstants.MAP, map);
startActivity(gotoService);
}

要获得此地图:

Bundle bundle = getIntent().getExtras();
HashMap<String, String> map = (HashMap<String, String>) bundle.getSerializable(AndyConstants.MAP);

尝试在com.example.chalaka.myapplication.Point类中实现Parcelable。

For example, when sending the intent:
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent = new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);
in MyOtherActivity activity
Intent intent = getIntent();    
HashMap<String, String> hashMap = (HashMap<String, String>) intent.getSerializableExtra("map");

最新更新