Android編程實現(xiàn)使用Intent傳輸包含自定義類的ArrayList示例
本文實例講述了Android編程實現(xiàn)使用Intent傳輸包含自定義類的ArrayList。分享給大家供大家參考,具體如下:
前言
之前項目中通過Intent只是傳輸簡單的字符串,這次因為需要在前一個頁面聯(lián)網(wǎng)獲取對象數(shù)據(jù),然后在下一個頁面使用,所以考慮到使用Intent傳輸包含自定義類的ArrayList。
Serializable
Java的對象序列化指的是將那些實現(xiàn)了Serializable接口的對象轉(zhuǎn)換成一個字節(jié)序列,并且能在需要的時候再將這個字節(jié)序列完全恢復(fù)為之前的對象。
想實現(xiàn)對象的序列化,需要實現(xiàn)java.io.Serializable接口(注意,這個接口只是一個標(biāo)記接口,并沒有具體需要override的方法)。當(dāng)然,你也可以自己實現(xiàn)對象的序列化,但是我認(rèn)為既然Java提供了這么一套對象序列化的機(jī)制,我們最好還是使用官方提供的方法。
Example
創(chuàng)建一個簡單對象,并且實現(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() + "]"; } }
再寫一個類,用于實現(xiàn)對象的序列化和反序列化
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,是因為這是實現(xiàn)Intent傳輸?shù)那疤?,ArrayList包含的自定義類必須實現(xiàn)Serializable接口才能通過putSerializable()
方法被傳遞。
還是用上面的Person類作為自定義的類,則第一個傳遞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);
第二個接收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相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
mac系統(tǒng)下載、安裝、使用AndroidStudio
本文給大家介紹的是在Mac系統(tǒng)中下載安裝以及使用AndroidStudio的詳細(xì)教程,非常的實用,有需要的小伙伴可以參考下2017-10-10Android編程使用光線傳感器獲取光線強(qiáng)弱的方法【LightSensorManager封裝類】
這篇文章主要介紹了Android編程使用光線傳感器獲取光線強(qiáng)弱的方法,結(jié)合實例形式分析了Android光線傳感器管理封裝類LightSensorManager的具體實現(xiàn)技巧,需要的朋友可以參考下2017-11-11flutter 輸入框組件TextField的實現(xiàn)代碼
這篇文章主要介紹了flutter 輸入框組件TextField的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Android項目實戰(zhàn)之仿網(wǎng)易頂部導(dǎo)航欄效果
這篇文章主要為大家詳細(xì)介紹了Android項目實戰(zhàn)之仿網(wǎng)易頂部導(dǎo)航欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05Android Studio做超好玩的拼圖游戲 附送詳細(xì)注釋源碼
這篇文章主要介紹了用Android Studio做的一個超好玩的拼圖游戲,你是0基礎(chǔ)Android小白也能包你學(xué)會,另外附送超詳細(xì)注釋的源碼,建議收藏!2021-08-08android 中 webview 怎么用 localStorage
這篇文章主要介紹了android 中 webview 怎么用 localStorage方法的相關(guān)資料,需要的朋友可以參考下2015-07-07