我使用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](正在运行)
答案 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");