I have passed one multi-dimensional array to another activity using putSerializable() and retrieve using getSerializable. But I got some problems. Please help me to solve my problem..
First activity:
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);
Second Activity:
String [][] list_new= new String[10][];
Bundle b=this.getIntent().getExtras();
Serializable list= b.getSerializable("list");
list_new=(String[][])list;
When I am running my applicati开发者_如何转开发on, my application is suddenly stopped. Is this the right method to retrive the String array? Please give me the solution.. Thank you...
This is the output from Debug window:
CalorieCounter [Android Application]
CalorieCounter [Android Application] CalorieCounter [Android Application] CalorieCounter [Android Application] CalorieCounter [Android Application] CalorieCounter [Android Application] CalorieCounter [Android Application] CalorieCounter [Android Application] CalorieCounter [Android Application] DalvikVM[localhost:8605] Thread [<1> main] (Suspended (exception RuntimeException)) ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2663 ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2679 ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125 ActivityThread$H.handleMessage(Message) line: 2033 ActivityThread$H(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 ActivityThread.main(String[]) line: 4627 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 868 ZygoteInit.main(String[]) line: 626 NativeStart.main(String[]) line: not available [native method] Thread [<6> Binder Thread #2] (Running) Thread [<5> Binder Thread #1] (Running) Thread [<7> Binder Thread #3] (Running)
You should not use serializable, android implements parcelables in a much much more effective way. The catch is you have to define how parcel the object yourself, but it really isnt that hard.
Simple example:
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();
}
}
To send it:
Intent list_intent= new Intent(v.getContext(), second_activity.class);
list_intent.putExtras("list",list_bundle);
startActivityForResult(list_intent, 2);
To recieve it:
Bundle b=this.getIntent().getExtras();
MyParcelable list= (MyParcelable)b.getParcelable("list");
精彩评论