`

Intent如何传递对象

阅读更多
Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo。

工程结构图:
[img]

[/img]

Book:
package com.tutor.objecttran;
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;
	}
	
	public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() {
		public Book createFromParcel(Parcel source) {
			Book mBook = new Book();
			mBook.bookName = source.readString();
			mBook.author = source.readString();
			mBook.publishTime = source.readInt();
			return mBook;
		}
		public Book[] newArray(int size) {
			return new Book[size];
		}
	};
	
	public int describeContents() {
		return 0;
	}
	public void writeToParcel(Parcel parcel, int flags) {
		parcel.writeString(bookName);
		parcel.writeString(author);
		parcel.writeInt(publishTime);
	}
}



Person:
package com.tutor.objecttran;
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;
	}
	
}


ObjectTranDemo:
package com.tutor.objecttran;
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;
	public  final static String SER_KEY = "com.tutor.objecttran.ser";
	public  final static String PAR_KEY = "com.tutor.objecttran.par";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   
        setupViews();
        
    }
    
    //我的一贯作风呵呵
    public void setupViews(){
    	sButton = (Button)findViewById(R.id.button1);
    	pButton = (Button)findViewById(R.id.button2);
    	sButton.setOnClickListener(this);
    	pButton.setOnClickListener(this);
    }
    //Serializeable传递对象的方法
    public void SerializeMethod(){
    	Person mPerson = new Person();
    	mPerson.setName("frankie");
    	mPerson.setAge(25);
    	Intent mIntent = new Intent(this,ObjectTranDemo1.class);
    	Bundle mBundle = new Bundle();
    	mBundle.putSerializable(SER_KEY,mPerson);
    	mIntent.putExtras(mBundle);
    	
    	startActivity(mIntent);
    }
    //Pacelable传递对象方法
    public void PacelableMethod(){
    	Book mBook = new Book();
    	mBook.setBookName("Android Tutor");
    	mBook.setAuthor("Frankie");
    	mBook.setPublishTime(2010);
    	Intent mIntent = new Intent(this,ObjectTranDemo2.class);
    	Bundle mBundle = new Bundle();
    	mBundle.putParcelable(PAR_KEY, mBook);
    	mIntent.putExtras(mBundle);
    	
    	startActivity(mIntent);
    }
    //铵钮点击事件响应
	public void onClick(View v) {
		if(v == sButton){
			SerializeMethod();
		}else{
			PacelableMethod();
		}
	}
}


ObjectTranDemo1:
package com.tutor.objecttran;
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(ObjectTranDemo.SER_KEY);
        mTextView.setText("You name is: " + mPerson.getName() + "/n"+
        		"You age is: " + mPerson.getAge());
        
        setContentView(mTextView);
    }
}


ObjectTranDemo2:
package com.tutor.objecttran;
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(ObjectTranDemo.PAR_KEY);
        mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+
        				  "Author is: " + mBook.getAuthor() + "/n" +
        				  "PublishTime is: " + mBook.getPublishTime());
        setContentView(mTextView);
    }
}


res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Welcome to Mr wei's blog."
    />
<Button
	android:id="@+id/button1"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="Serializable"
/>
<Button
	android:id="@+id/button2"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="Parcelable"
/>
</LinearLayout>


AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.tutor.objecttran"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ObjectTranDemo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
		<activity android:name=".ObjectTranDemo1"></activity>
		<activity android:name=".ObjectTranDemo2"></activity>
    </application>
    <uses-sdk android:minSdkVersion="7" />
</manifest> 
  • 大小: 7.6 KB
分享到:
评论

相关推荐

    Intent传递对象、对象数组

    本话题将详细探讨如何通过Intent传递对象以及对象数组。 一、Intent的基础 Intent主要由两部分构成:Action(动作)和Data(数据)。Action定义了Intent要执行的操作,如ACTION_VIEW、ACTION_SEND等;Data则包含了...

    Intent传递对象

    本篇文章将深入探讨如何通过Intent传递对象,以及涉及到的序列化方式——Serializable和Parcelable。 首先,Intent主要分为显式Intent和隐式Intent。显式Intent明确指定要启动的目标组件,而隐式Intent则通过ACTION...

    Android系列之Intent传递对象的几种实例方法

    在实际开发中,如果需要频繁地通过Intent传递对象,推荐使用`Parcelable`接口,以提高应用性能。然而,对于简单的数据模型或者不需要考虑性能的情况下,`Serializable`接口是一个更简单的选择。 总结起来,Android...

    android Intent传递对象数据

    - **优点**:性能优秀,是Android系统推荐的传递对象的方式,因为它在内存和时间效率上都优于`Serializable`。 - **缺点**:实现过程相对复杂,需要手动处理每个字段的序列化和反序列化。 ### 结论 对于简单的对象...

    Android Intent传递对象

    "Android Intent传递对象"这个主题主要关注如何利用Intent来传递自定义对象,以便在应用程序的不同部分共享数据。下面我们将深入探讨这个话题。 首先,了解Intent的基本结构和类型至关重要。Intent有两种类型:显式...

    Intent传递对象Serializable

    以上就是使用Serializable接口在Intent中传递对象的基本操作和注意事项。在实际开发中,根据项目需求和性能要求,选择合适的对象传递方式是非常重要的。在提供的Android_project_Serializable项目中,你可以找到相关...

    【Intent传递】对象、数组

    本DEMO主要讲解如何通过Intent传递对象和数组,这些都是Android开发中的基础知识,对于理解应用程序间的数据通信至关重要。 一、Intent的基本使用 Intent对象是用来表示一个操作的意图,它可以携带少量的数据。在...

    intent传递对象

    总的来说,Parcelable和Serializable都是Android中用于Intent传递对象的方式,两者各有优劣。Parcelable在性能上占优,而Serializable则在实现上更简洁。开发者应根据实际需求和项目特点来决定采用哪种方式。

    android中Intent传递对象的两种方法(Serializable,Parcelable)

    - **性能**:Parcelable的序列化和反序列化速度远超Serializable,尤其是在传递大量数据或频繁传递对象时。 - **内存消耗**:Parcelable在内存使用上也优于Serializable,因为它不需要创建额外的代理对象。 - **复杂...

    Android编程使用Intent传递对象的方法分析

    本文实例分析了Android编程使用Intent传递对象的方法。分享给大家供大家参考,具体如下: 之前的文章中,介绍过Intent的用法,比如启动活动,发送广播,启发服务等,并且可以使用Intent时传递一些数据。如下代码所示...

    Xamarin.Android之Intent传递对象简单实例

    4. **传递对象**:现在,你可以在Intent中使用`PutParcelableExtra()`方法传递实现了`IParcelable`接口的对象。 ```csharp var intent = new Intent(this, typeof(SecondActivity)); intent.PutParcelableExtra("my...

    Android intent 传递对象以及返回刷新

    本教程将深入探讨如何使用Intent在Activity之间传递对象以及在Activity返回时刷新数据。 首先,我们来理解Intent的基本概念。Intent是Android系统的一个核心概念,它表示一个动作(Action)和动作的目标(Component...

    Android Intent传递数据大小限制详解

    Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat报错等等。 这就牵涉到一个问题:Intent 传递数据大小限制。 Intent到底能够携带多少数据呢? 使用Intent传送数据时...

    Intent传递对象之Serializable和Parcelable的区别

    Intent在不同的组件中传递对象数据的应用非常普遍,大家都知道在intent传递对象的方法有两种:1、实现Serializable接口、2、实现Parcelable接口。 Android中Intent传递对象的两种方法Serializable,Parcelable请点击...

    Android中Intent传递对象的3种方式详解

    相信Intent的用法大家已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,当我们使用Intent在Activity 间传递信息时发现putExtra() 方法并不支持自定义对象的传输...

    intent传对象

    2. **在Intent中传递对象** 创建一个Intent对象,然后使用putExtra()方法将对象序列化后放入Intent。如下所示: ```java MyObject myObject = new MyObject(); myObject.setName("John"); myObject.setAge(30);...

    android中intent传递list或者对象的方法

    本文实例讲述了android中intent传递list或者对象的方法。分享给大家供大家参考。具体实现方法如下: 方法一: 如果单纯的传递List&lt;String&gt; 或者List的话 就可以直接使用 代码如下: 代码如下:intent....

    Android开发中Intent传递对象的方法分析

    本文实例分析了Android开发中Intent传递对象的方法。分享给大家供大家参考,具体如下: 方法一: 利用方法:public Intent putExtra (String name, Parcelable value)传递一个Parceable的参数,此方法的参数被序列化...

Global site tag (gtag.js) - Google Analytics