溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android中怎么使用Intent傳輸包含自定義類的ArrayList

發(fā)布時(shí)間:2021-07-22 16:48:39 來源:億速云 閱讀:174 作者:Leah 欄目:移動(dòng)開發(fā)

這篇文章給大家介紹Android中怎么使用Intent傳輸包含自定義類的ArrayList,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

Serializable

Java的對(duì)象序列化指的是將那些實(shí)現(xiàn)了Serializable接口的對(duì)象轉(zhuǎn)換成一個(gè)字節(jié)序列,并且能在需要的時(shí)候再將這個(gè)字節(jié)序列完全恢復(fù)為之前的對(duì)象。

想實(shí)現(xiàn)對(duì)象的序列化,需要實(shí)現(xiàn)java.io.Serializable接口(注意,這個(gè)接口只是一個(gè)標(biāo)記接口,并沒有具體需要override的方法)。當(dāng)然,你也可以自己實(shí)現(xiàn)對(duì)象的序列化,但是我認(rèn)為既然Java提供了這么一套對(duì)象序列化的機(jī)制,我們最好還是使用官方提供的方法。

Example

創(chuàng)建一個(gè)簡(jiǎn)單對(duì)象,并且實(shí)現(xiàn)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 transinet
  private 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() + "]";
  }
}

再寫一個(gè)類,用于實(shí)現(xiàn)對(duì)象的序列化和反序列化

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 file
    FileOutputStream 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 file
    FileInputStream 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,是因?yàn)檫@是實(shí)現(xiàn)Intent傳輸?shù)那疤?,ArrayList包含的自定義類必須實(shí)現(xiàn)Serializable接口才能通過putSerializable()方法被傳遞。

還是用上面的Person類作為自定義的類,則第一個(gè)傳遞ArrayList的Activity關(guān)鍵代碼如下:

// Intent Creation and Initialization
Intent passIntent = new Intent();
passIntent.setClass(MainActivity.this, SecondaryActivity.class);
// Create custom class Object
Person p1 = new Person("Wang", "Zhengyi", "first");
Person p2 = new Person("Chen", "Shan", "second");
// Create Array List of custom Class and add the Created object
ArrayList<Person> aListClass = new ArrayList<Person>();
aListClass.add(p1);
aListClass.add(p2);
// Create a Bundle and Put Bundle in to it
Bundle bundleObject = new Bundle();
bundleObject.putSerializable("key", aListClass);
// Put Bundle in to Intent and call start Activity
passIntent.putExtras(bundleObject);
startActivity(passIntent);

第二個(gè)接收ArrayList的Activity關(guān)鍵代碼如下:

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();
}

關(guān)于Android中怎么使用Intent傳輸包含自定義類的ArrayList就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI