2010-10-27 72 views
0

我使用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; 

当我跑我的申请,我的应用程序突然停止。 这是正确的方法来检索字符串数组? 请给我解决.. 谢谢...


这是从调试窗口输出:

CalorieCounter [Android应用程序]
CalorieCounter [Android应用程序]
CalorieCounter [Android应用]
CalorieCounter [Android应用]
CalorieCounter [Android应用]
CalorieCounter [Android应用程序]
CalorieCounter [Android应用程序]
CalorieCounter [Android应用程序]
CalorieCounter [Android应用程序]
DalvikVM [本地主机:8605]
螺纹[< 1>主](暂停(例外的RuntimeException) )
ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,意图)线:2663
ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,意图)线:2679
ActivityThread.access $ 2300(ActivityThread ,ActivityThread $ ActivityRecord,意图)线:125 ActivityThread $ H.handleMessage(消息)线:2033
ActivityThread $ H(处理程序).dispatchMessage(消息)线:99 Looper.loop()线:123 ActivityThread。 Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)line:不可用[本机方法]
Method.invoke(Object,Object ...)线:521
ZygoteInit $ MethodAndArgsCaller.run()线:868
ZygoteInit.main(字符串[])线:626 NativeStart.main(字符串[])行:不可用[本机方法]
螺纹[< 6>粘合剂线程#2](正在运行) 螺纹[< 5>捆扎线#1](运行) 螺纹[< 7>粘合剂线程#3](正在运行)

+0

如果停止,那么就应该在你的Android堆栈跟踪logcat的。请展示它。 – 2010-10-27 09:48:33

+0

CalorieCounter [Android应用程序] \t \t DalvikVM [本地主机:8605] \t \t 螺纹\t [<1>主](暂停(例外的RuntimeException))\t \t \t \t ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,意图)线:2663 \t \t \t \t ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,意图)线:2679 \t \t \t \t ActivityThread.a CCESS $ 2300(ActivityThread,ActivityThread $ ActivityRecord,意图)线:125 \t \t \t \t ActivityThread $ H.handleMessage(消息)线:2033 \t \t \t \t ActivityThread $ H(处理程序).dispatchMessage(消息)线:99 – Miya 2010-10-27 10:10:07

+0

Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)line:不可用[本机方法] \t \t \t \t Method.invoke(Object,Object ...)line:521 \t \t \t \t ZygoteInit $ MethodAndArgsCaller.run()line:868 \t \t \t \t ZygoteInit.main(字符串[])线:626 \t \t \t \t NativeStart.main(字符串[])行:不可用[本机方法] \t \t 螺纹\t [<6>捆扎线#2](运行)\t \t 螺纹\t [<5>捆扎线#1](运行)\t \t 螺纹\t [<7>捆扎线#3](运行) – Miya 2010-10-27 10:10:27

回答

0

您不应该使用可序列化的,android以更有效的方式实现包裹。问题是你必须定义自己如何包裹对象,但它确实不是那么难。

简单的例子:

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