Android中Parcelable的作用實例解析
在android提供了一種類型:Parcel。被用作封裝數(shù)據(jù)的容器,封裝后的數(shù)據(jù)可以通過Intent或IPC傳遞。 除了基本類型以外,只有實現(xiàn)了Parcelable接口的類才能被放入Parcel中。
Parcelable實現(xiàn)要點:需要實現(xiàn)三個東西
1)writeToParcel 方法。該方法將類的數(shù)據(jù)寫入外部提供的Parcel中.聲明如下:
writeToParcel (Parcel dest, int flags) 具體參數(shù)含義見javadoc
2)describeContents方法。沒搞懂有什么用,反正直接返回0也可以
3)靜態(tài)的Parcelable.Creator接口。本接口有兩個方法:
createFromParcel(Parcel in) 實現(xiàn)從in中創(chuàng)建出類的實例的功能
newArray(int size) 創(chuàng)建一個類型為T,長度為size的數(shù)組,僅一句話(return new T[size])即可。估計本方法是供外部類反序列化本類數(shù)組使用。
測試用的接收信息Activity:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
public class Test extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent i = getIntent();
Person p = i.getParcelableExtra("yes");
System.out.println("---->"+p.name);
System.out.println("---->"+p.map.size());
}
}
發(fā)送的Activity:
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class TestNew extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent();
Person p = new Person();
p.map = new HashMap<String,String>();
p.map.put("yes", "ido");
p.name="ok";
intent.putExtra("yes", p);
intent.setClass(this, Test.class);
startActivity(intent);
}
}
Parcelable的實現(xiàn)類:
import java.util.HashMap;
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
public HashMap<String,String> map = new HashMap<String,String> ();
public String name ;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeMap(map);
dest.writeString(name);
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
//重寫Creator
@Override
public Person createFromParcel(Parcel source) {
Person p = new Person();
p.map=source.readHashMap(HashMap.class.getClassLoader());
p.name=source.readString();
return p;
}
@Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return null;
}
};
}
相關(guān)文章
Spring MVC--攔截器實現(xiàn)和用戶登陸例子
本文主要介紹了Spring MVC--攔截器實現(xiàn)和用戶登陸例子,具有很好的參考價值,下面跟著小編一起來看下吧2017-03-03
jvm調(diào)優(yōu)的幾種場景(小結(jié))
本文主要介紹了jvm調(diào)優(yōu)的幾種場景,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
SpringBoot創(chuàng)建JSP登錄頁面功能實例代碼
這篇文章主要介紹了SpringBoot創(chuàng)建JSP登錄頁面功能實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-04-04
Spring之ShutDown?Hook死鎖現(xiàn)象解讀
這篇文章主要介紹了Spring之ShutDown?Hook死鎖現(xiàn)象解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
詳解SpringBoot中@PostMapping注解的用法
在SpringBoot中,我們經(jīng)常需要編寫RESTful Web服務(wù),以便于客戶端與服務(wù)器之間的通信,@PostMapping注解可以讓我們更方便地編寫POST請求處理方法,在本文中,我們將介紹@PostMapping注解的作用、原理,以及如何在SpringBoot應(yīng)用程序中使用它2023-06-06
SpringBoot結(jié)合mybatis-plus實現(xiàn)分頁的項目實踐
本文主要介紹了SpringBoot結(jié)合mybatis-plus實現(xiàn)分頁的項目實踐,主要基于MyBatis-Plus 自帶的分頁插件 PaginationInterceptor,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06

