当我尝试将一个意图从一个活动传递到另一个活动时,我的应用程序崩溃了,没有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");
}
}
答案 0 :(得分:0)
使用Parcelable或Serializable实现Subject类 Android不允许在活动之间传递对象,除非它们实现Parcelable或Serializable。 Parcelable比Serialization更快的事实使它成为传递对象时的首选方法。
实施Parcelable的示例 - http://wptrafficanalyzer.in/blog/android-parcelable-example-passing-data-between-activities/
Parcelable Vs Serializable - http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development
答案 1 :(得分:0)
您需要在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");
我希望它有所帮助!
答案 2 :(得分:0)
您可以使用可序列化接口扩展您的实体类,或者使用parcelable接口扩展您的实体类。
您应该在主题实体
中实现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");
希望这会对你有帮助..