Android通過Intent傳輸包含自訂類的ArrayList

來源:互聯網
上載者:User

標籤:android   blog   java   get   使用   資料   

前言之前項目中通過Intent只是傳輸簡單的字串,這次因為需要在前一個頁面連網擷取對象資料,然後在下一個頁面使用,所以考慮到使用Intent傳輸包含自訂類的ArrayList。
SerializableJava的對象序列化指的是將那些實現了Serializable介面的對象轉換成一個位元組序列,並且能在需要的時候再將這個位元組序列完全恢複為之前的對象。
想實現對象的序列化,需要實現java.io.Serializable介面(注意,這個介面只是一個標記介面,並沒有具體需要override的方法)。當然,你也可以自己實現對象的序列化,但是我認為既然Java提供了這麼一套對象序列化的機制,我們最好還是使用官方提供的方法。
Example建立一個簡單對象,並且實現Serializable介面
package javastudy;import java.io.Serializable;public class Person implements Serializable {private static final long serialVersionUID = -6470574927973900913L;private String firstName;private String secondName;// example for transinetprivate transient String noSerializableString;public Person(String firstName, String secondName, String noSerializableString) {super();this.firstName = firstName;this.secondName = secondName;this.noSerializableString = noSerializableString;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getSecondName() {return secondName;}public void setSecondName(String secondName) {this.secondName = secondName;}public String getNoSerializableString() {if (noSerializableString != null) {return noSerializableString;} else {return "";}}public void setNoSerializableString(String noSerializableString) {this.noSerializableString = noSerializableString;}public String toString() {return "Person [ first name :" + getFirstName() + ", second name :" + getSecondName() + ", no serializable :"+ getNoSerializableString() + "]";}}

再寫一個類,用於實現對象的序列化和還原序列化
package javastudy;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class TestSerializable {public static void main(String[] args) {Person person = new Person("Wang", "Zhengyi", "Genius");String fileName = "/tmp/person.out";// save object to fileFileOutputStream fos = null;ObjectOutputStream out = null;try {fos = new FileOutputStream(fileName);out = new ObjectOutputStream(fos);out.writeObject(person);out.flush();} catch (Exception e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();}}}// read object from fileFileInputStream fin = null;ObjectInputStream in = null;try {fin = new FileInputStream(fileName);in = new ObjectInputStream(fin);Person p = (Person) in.readObject();System.out.println(p);} catch (Exception e) {e.printStackTrace();} finally {if (fin != null) {try {fin.close();} catch (IOException e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}}

Intent傳輸包含自訂類的ArrayList之所以之前介紹了Serializable,是因為這是實現Intent傳輸的前提,ArrayList包含的自訂類必須實現Serializable介面才能通過putSerializable()方法被傳遞。
還是用上面的Person類作為自訂的類,則第一個傳遞ArrayList的Activity關鍵代碼如下:
// Intent Creation and InitializationIntent passIntent = new Intent();passIntent.setClass(MainActivity.this, SecondaryActivity.class);                 // Create custom class ObjectPerson p1 = new Person("Wang", "Zhengyi", "first");Person p2 = new Person("Chen", "Shan", "second");                 // Create Array List of custom Class and add the Created objectArrayList<Person> aListClass = new ArrayList<Person>();aListClass.add(p1);aListClass.add(p2);                 // Create a Bundle and Put Bundle in to itBundle bundleObject = new Bundle();bundleObject.putSerializable("key", aListClass);                 // Put Bundle in to Intent and call start ActivitypassIntent.putExtras(bundleObject);startActivity(passIntent);

第二個接收ArrayList的Activity關鍵代碼如下:
try{    // Get the Bundle Object            Bundle bundleObject = getIntent().getExtras();                     // Get ArrayList Bundle    ArrayList<Person> classObject = (ArrayList<Person>) bundleObject.getSerializable("key");                     Retrieve Objects from Bundle    for(int index = 0; index < classObject.size(); index++){                         Person person = classObject.get(index);        Toast.makeText(getApplicationContext(), person, Toast.LENGTH_SHORT).show();    }} catch(Exception e){    e.printStackTrace();}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.