2016-05-31 20 views
0
一個哈希表發送到一個新的活動

我想送「的HashMap pointMap」這個散列映射到一個新的活動, 這是我在Main2Activity類發送地圖, 在onCreate方法無法通過putExtra

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類它的擴展視圖,它有方法調用getPointMap返回HashMap中

這個我如何收到它從下一個活動

hashMap = (HashMap<Integer , Point>) this.getIntent().getSerializableExtra("hashMap"); 
主要 過程:com。示例

送我檢查是否有任何元素,在其記錄顯示它有元素 但是當代碼運行它給這個異常

致命異常我的問題是前.chalaka.myapplication,PID:22046 java.lang.RuntimeException:Parcel:unable to marshal value [email protected] at 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) 在機器人。 content.Intent.writeToParcel(Intent.java:7335) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2485) at android。 app.Instrumentation.execStartActivity(Instrumentation.java:1486) at android.app.Activity.startActivityForResult(Activity.java:3796) at android.app.Activity.startActivityForResult(Activity.java:3744) at android.support .v4.app.FragmentActivity.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) at android.view.View.performClick(View.java:4808) at android.view.View $ PerformClick.run(View.java:19918) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5536) at java.lang.reflect.Method.invoke(Native Method) at java .lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1397) at com.android.internal.os.ZygoteInit。主(ZygoteInit.java:1192)

請幫我解決這個...

+0

嘗試使用Parcelable:https://developer.android.com/reference/android/os/Parcelable.html insted HashMap。旨在保存意向參數。 – Kenumir

回答

2

的問題是,你的com.example.chalaka.myapplication.Point類沒有實現Parcelable也不Serializable

這樣做和上面的代碼將按預期工作。

+0

謝謝它的作品... –

0

寫信要開始新的活動這種方法:

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); 
0

嘗試在您的COM實現Parcelable。 example.chalaka.myapplication.Point類。

0
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");