使用Serializable传递多维数组

时间:2010-10-27 09:46:13

标签: android multidimensional-array

我使用putSerializable()将一个多维数组传递给另一个活动,并使用getSerializable进行检索。但是我遇到了一些问题。请帮我解决我的问题..

第一项活动:

  String [][] selected_list= new String[10][];           
  Bundle list_bundle=new Bundle();
  list_bundle.putSerializable("lists",selected_list);

  Intent list_intent= new Intent(v.getContext(), second_activity.class);
  list_intent.putExtras(list_bundle);
  startActivityForResult(list_intent, 2);

第二项活动:

  String [][] list_new= new String[10][];    
  Bundle b=this.getIntent().getExtras();
  Serializable list= b.getSerializable("list");
  list_new=(String[][])list;   

当我运行我的应用程序时,我的应用程序突然停止。 这是检索String数组的正确方法吗? 请给我解决方案.. 谢谢......


这是Debug窗口的输出:

  

CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
  CalorieCounter [Android应用程序]
      DalvikVM [本地主机:8605]
          线程[< 1> main](Suspended(例外RuntimeException))
              ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,Intent)行:2663
              ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,Intent)行:2679
              ActivityThread.access $ 2300(ActivityThread,ActivityThread $ ActivityRecord,Intent)行:125               ActivityThread $ H.handleMessage(消息)行:2033
              ActivityThread $ H(Handler).dispatchMessage(Message)行:99               Looper.loop()行:123               ActivityThread.main(String [])行:4627
              Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)line:not available [native method]
              Method.invoke(Object,Object ...)行:521
              ZygoteInit $ MethodAndArgsCaller.run()行:868
              ZygoteInit.main(String [])行:626               NativeStart.main(String [])行:不可用[native method]
          线程[< 6> Binder Thread#2](正在运行)           线程[< 5> Binder Thread#1](正在运行)           线程[< 7> Binder Thread#3](正在运行)

1 个答案:

答案 0 :(得分:0)

你不应该以更加有效的方式使用serializable,android实现parcelables。问题是你必须自己定义如何包裹对象,但实际上并不难。

简单示例:

public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

发送:

Intent list_intent= new Intent(v.getContext(), second_activity.class);
list_intent.putExtras("list",list_bundle);
startActivityForResult(list_intent, 2);

收到它:

Bundle b=this.getIntent().getExtras();
MyParcelable list= (MyParcelable)b.getParcelable("list");