现在的位置: 首页 > 综合 > 正文

Parcelable接口和serializable系列的Activity数据类传递

2018年05月27日 ⁄ 综合 ⁄ 共 4443字 ⁄ 字号 评论关闭

Activity之间的数据类传递  Parcelable接口和serializable系列,都是用来在不同界面之间进行类形式的数据交互。

1:Parcelable用法:几个界面之间的传递类数据

 * 1:定义的数据类实现接口Parcelable
 * 2:重写数据类的 writeToParcel(Parcel arg0, int arg1)方法  用来写入数据
 * 3:该数据类必须有一个静态领域   而且静态变量名字必须是CREATOR

 *    public static final Parcelable.Creator<Data> CREATOR  用来读出写入的数据

Demo:

package com.example.intent_class;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * intent的传递类  把该数据类拿来在界面1与界面2之间传递
 * @author 
 *
 */
public class Data implements Parcelable{

	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Data(int id, String name) 
	{
		this.id = id;
		this.name = name;
	}
	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}
	/**
	 * 将数据写入Parcel
	 */
	@Override
	public void writeToParcel(Parcel arg0, int arg1) {
		// TODO Auto-generated method stub
		//将数据写入Parcel里去
		arg0.writeInt(id);
		arg0.writeString(name);
		
	}
	//该静态领域是必须有的  而且静态变量名字必须是CREATOR
	public static final Parcelable.Creator<Data> CREATOR=new Parcelable.Creator<Data>(){

		@Override
		public Data createFromParcel(Parcel arg0) {
			// TODO Auto-generated method stub
			//将数据从Parcel读出
			int num=arg0.readInt();
			String str=arg0.readString();
			return new Data(num,str);
		}

		@Override
		public Data[] newArray(int arg0) {
			// TODO Auto-generated method stub
			return null;
		}
		
	};


}



public class MainActivity extends Activity {

	Intent intent;
	Data data;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		data=new Data(11,"Data类数据1");
		intent=new Intent(MainActivity.this,Activity2.class);
		
	}
	public void myclick(View v)
	{
		Bundle bundle=new Bundle();
		bundle.putParcelable("bundle1", data);
		intent.putExtra("intent1", bundle);
		startActivity(intent);
	}

package com.example.intent_class;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
/**
 * 界面2
 * @author LiTing
 *
 */
public class Activity2 extends Activity {

	Intent intent;
	Data data;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.view2);
		//获取从界面1传递来的数据
		intent=getIntent();
		Bundle bundle=intent.getBundleExtra("intent1");
		//得到传递来的数据类
		data=bundle.getParcelable("bundle1");
		Toast.makeText(this, data.getName(), 0).show();
	}

	public void myclick(View v)
	{
	//返回到界面1
		intent=new Intent(Activity2.this,MainActivity.class);
		startActivity(intent);
		finish();
	}
}

2可以向Bundle放入一个可序化对象  Serializable

serializable系列的用法:

* 1:数据类实现接口Serializable
 * 2:数据类需要定义一个private static final long serialVersionUID = 1L;//版本序列号
 * 3:完成

Demo2:

package com.example.intent_serializable_class;

import java.io.Serializable;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * intent的传递类  把该数据类拿来在界面1与界面2之间传递
 * @author LiTing
 *
 */
public class Data implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;//版本序列号
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Data(int id, String name) 
	{
		this.id = id;
		this.name = name;
	}
	

}

package com.example.intent_serializable_class;

import java.io.Serializable;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
/**
 * serializable用法的几个界面之间的传递类数据
 * 1:数据尅实现接口Serializable
 * 2:数据类需要定义一个private static final long serialVersionUID = 1L;//版本序列号
 * 3:完成
 * @author 
 *
 */
public class MainActivity extends Activity {

	Intent intent;
	Data data;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		data=new Data(11,"Data类数据1");
		intent=new Intent(MainActivity.this,Activity2.class);
		
	}
	public void myclick(View v)
	{
		Bundle bundle=new Bundle();
		bundle.putSerializable("bundle1",  data);
		intent.putExtra("intent1", bundle);
		startActivity(intent);
	}


}

package com.example.intent_serializable_class;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
/**
 * 界面2
 * @author 
 *
 */
public class Activity2 extends Activity {

	Intent intent;
	Data data;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.view2);
		//获取从界面1传递来的数据
		intent=getIntent();
		Bundle bundle=intent.getBundleExtra("intent1");
		//得到传递来的serializable数据类
		data=(Data) bundle.getSerializable("bundle1");
		Toast.makeText(this, data.getName(), 0).show();
	}

	public void myclick(View v)
	{
	//返回到界面1
		intent=new Intent(Activity2.this,MainActivity.class);
		startActivity(intent);
		finish();
	}
}

抱歉!评论已关闭.