日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...

發布時間:2023/12/2 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android中的傳遞有兩個方法,一個是Serializable,另一個是Parcelable。

Serializable是J2SE本身就支持的。而Parcelable是Android所特有的。

二者的使用場景和區別:

1)在使用內存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。

2)Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。

3)Parcelable不能使用在要將數據存儲在磁盤上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。盡管Serializable效率低點,但此時還是建議使用Serializable 。

Serializable接口實現比較簡單,只要實現setter和getter,就可以了。

而Parcelable實現比較麻煩些。用一個小的demo來說明:

1.新建android項目ObjectTranDemo

2.創建一個entity的javaBean:Person.java.實現Serializable接口

package com.example.objecttrandemo;

import java.io.Serializable;

public class Person implements Serializable {

private static final long serialVersionUID = -7060210544600464481L;

private String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

3.創建主界面activity_main.xml:

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="android object trance"

/>

android:id="@+id/button1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Serializable"

/>

android:id="@+id/button2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Parcelable"

/>

4.創建主activity。這個activity主要用來響應點擊事件,和傳遞數據。ObjecttranDemo.java:

package com.example.objecttrandemo;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class ObjectTranDemo extends Activity implements OnClickListener{

private Button sButton,pButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

setupViews();

}

//initial the views

public void setupViews(){

sButton = (Button)findViewById(R.id.button1);

pButton = (Button)findViewById(R.id.button2);

sButton.setOnClickListener(this);

pButton.setOnClickListener(this);

}

//Serializeable object trance

public void SerializeMethod(){

Person mPerson = new Person();

mPerson.setName("durant");

mPerson.setAge(25);

Intent mIntent = new Intent(this,ObjectTranDemo1.class);

Bundle mBundle = new Bundle();

mBundle.putSerializable("mPerson",mPerson);

mIntent.putExtras(mBundle);

startActivity(mIntent);

}

//Pacelable object trance

public void PacelableMethod(){

Book mBook = new Book();

mBook.setBookName("a man from mars");

mBook.setAuthor("james");

mBook.setPublishTime(2014);

Intent mIntent = new Intent(this,ObjectTranDemo2.class);

Bundle mBundle = new Bundle();

mBundle.putParcelable("mBook", mBook);

mIntent.putExtras(mBundle);

startActivity(mIntent);

}

@Override

public void onClick(View v) {

if(v == sButton){

SerializeMethod();

}else{

PacelableMethod();

}

}

}

5.新建activity ObjectTranDemo1.java用來顯示Serializable接口傳遞過來的數據

package com.example.objecttrandemo;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class ObjectTranDemo1 extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView mTextView = new TextView(this);

Person mPerson = (Person)getIntent().getSerializableExtra("mPerson");

mTextView.setText("You name is: " + mPerson.getName() + "\n"+

"You age is: " + mPerson.getAge());

setContentView(mTextView);

}

}

至此,Serializable接口傳遞數據完畢,對了,別忘了,在Mainfest.xml文件中聲明新的activity

package="com.example.objecttrandemo"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="18" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.example.objecttrandemo.ObjectTranDemo"

android:label="@string/app_name" >

下面看Parcelable的傳遞:

實現Parcelable一般需要4個步驟:

1)implements Parcelable

2)重寫writeToParcel方法,將你的對象序列化為一個Parcel對象,即:將類的數據寫入外部提供的Parcel中,打包需要傳遞的數據到Parcel容器保存,以便從 Parcel容器獲取數據

3)重寫describeContents方法,內容接口描述,默認返回0就可以

4)實例化靜態內部對象CREATOR實現接口Parcelable.Creator

public static final Parcelable.Creator CREATOR

注:其中public static final一個都不能少,內部對象CREATOR的名稱也不能改變,必須全部大寫。需重寫本接口中的兩個方法:createFromParcel(Parcel in) 實現從Parcel容器中讀取傳遞數據值,封裝成Parcelable對象返回邏輯層,newArray(int size) 創建一個類型為T,長度為size的數組,僅一句話即可(return new T[size]),供外部類反序列化本類數組使用。

簡而言之:通過writeToParcel將你的對象映射成Parcel對象,再通過createFromParcel將Parcel對象映射成你的對象。也可以將Parcel看成是一個流,通過writeToParcel把對象寫到流里面,在通過createFromParcel從流里讀取對象,只不過這個過程需要你來實現,因此寫的順序和讀的順序必須一致。

具體:

1.新建Book的實體類:

Book.java:

package com.example.objecttrandemo;

import android.os.Parcel;

import android.os.Parcelable;

public class Book implements Parcelable{

private String bookName;

private String author;

private int publishTime;

public String getBookName() {

return bookName;

}

public void setBookName(String bookName) {

this.bookName = bookName;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public int getPublishTime() {

return publishTime;

}

public void setPublishTime(int publishTime) {

this.publishTime = publishTime;

}

//Internal Description Interface,You do not need to manage

@Override

public int describeContents() {

return 0;

}

//give some attention to the oder betwwen writeToParcel and createFromParcel

@Override

public void writeToParcel(Parcel parcel, int flags){

parcel.writeString(bookName);

parcel.writeString(author);

parcel.writeInt(publishTime);

}

public static final Parcelable.Creator CREATOR = new Creator() {

@Override

public Book[] newArray(int size) {

return new Book[size];

}

@Override

public Book createFromParcel(Parcel source) {

Book mBook = new Book();

mBook.bookName = source.readString();

mBook.author = source.readString();

mBook.publishTime = source.readInt();

return mBook;

}

};

}

2.新建activity :ObjectTranDemo2.java.用來顯示parcelable的數據:

package com.example.objecttrandemo;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class ObjectTranDemo2 extends Activity{

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView mTextView = new TextView(this);

Book mBook = (Book)getIntent().getParcelableExtra("mBook");

mTextView.setText("Book name is: " + mBook.getBookName()+"\n"+

"Author is: " + mBook.getAuthor() + "\n" +

"PublishTime is: " + mBook.getPublishTime());

setContentView(mTextView);

}

}

總結

以上是生活随笔為你收集整理的android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。