簡體   English   中英

Android-將對象的意圖從一個活動傳遞到另一個活動(崩潰)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM