[英]Android - Passing intent with object from one activity to another (crashing)
當我試圖將一種活動的意圖傳遞給另一種活動時,我的應用程序崩潰了,沒有putExtra()可以正常工作。
這是我第一個活動的摘錄
ArrayList<Subject> subjectList = new ArrayList<Subject>();
public void computeGrades(View view){
Intent intent = new Intent(this, JLCSActivity2B.class);
intent.putExtra("subjectList", subjectList);
startActivity(intent);
}
第二活動
public class JLCSActivity2B extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
Intent intent = getIntent();
ArrayList<Subject> subjectList = (ArrayList<Subject>) intent.getSerializableExtra("subjectList");
}
}
使用Parcelable或Serializable實現您的Subject類Android不允許在活動之間傳遞對象,除非它們實現Parcelable或Serializable。 Parcelable比序列化更快的事實使它成為傳遞對象時的首選方法。
實施例實施Parcelable - http://wptrafficanalyzer.in/blog/android-parcelable-example-passing-data-between-activities/
Parcelable Vs的序列化- http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development
您需要在Subject類中實現Serializable。
public class Subject implements Serializable {
//your variables, constructor and getters and setters
}
在您的“源活動”中,使用以下命令:
ArrayList<Subject> subjectList = new ArrayList<Subject>();
Intent intent = new Intent(SourceActivity.this, TargetActivity.class);
intent.putExtra("subjectList", subjectList);
在您的目標活動中,使用以下命令:
ArrayList<Subject> subjectList = new ArrayList<Subject>();
subjectList = (ArrayList<Question>)getIntent().getSerializableExtra("subjectList");
希望對您有所幫助!
您可以使用可序列化接口擴展您的實體類,或者使用可組合接口擴展您的實體類。
您應該在Subject實體中實現parcelable接口
public class Subject implements Parcelable {
String parceldata;
// your other fields with getter & setters
public Subject(Parcel in) {
String[] data = new String[1];
in.readStringArray(data);
this.parceldata = data[0];
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Subject createFromParcel(Parcel in) {
return new Subject(in);
}
public Subject[] newArray(int size) {
return new Subject[size];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
}
}
發送
args.putParcelable("data", subjectlist);
並訪問
subjectlist = (ArrayList<Subject>) getArguments().getParcelable("data");
希望這個能對您有所幫助..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.