Android - 将对象从一个活动传递到另一个活动(崩溃)

时间:2015-08-17 10:22:38

标签: java android android-intent arraylist crash

当我尝试将一个意图从一个活动传递到另一个活动时,我的应用程序崩溃了,没有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");
 }
}

3 个答案:

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

希望这会对你有帮助..