使用意图在Activity之间传递数据小插曲__传递对象
来源:互联网 发布:学德语的软件 编辑:程序博客网 时间:2024/05/29 07:46
Android中Intent中如何传递对象有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,通过一个简单的例子来给大家讲解一下。
工程结构图:
工程结构图:
运行结果截图:
mainActivity截图
SerialActivity截图
ParcelActivity截图
Book.java:
package com.intent.bean;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;}// 实例化静态内部对象CREATOR实现接口Parcelable.Creatorpublic static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {// 将Parcel对象反序列化为Bookpublic 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];}};@Overridepublic int describeContents() {return 0;}// 实现Parcelable的方法writeToParcel,将Book序列化为一个Parcel对象@Overridepublic void writeToParcel(Parcel parcel, int flags) {parcel.writeString(bookName);parcel.writeString(author);parcel.writeInt(publishTime);}}
Person.java:
package com.intent.bean;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;}}
MainActivity.java:
package com.intent.activity;import com.intent.bean.Book;import com.intent.bean.Person;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 MainActivity extends Activity implements OnClickListener {private Button btn_serial;private Button btn_parcel;public final static String SER_KEY = "com.intent.activity.ser";public final static String PAR_KEY = "com.intent.activity.par";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);setupViews();}// 我的一贯作风呵呵public void setupViews() {btn_serial = (Button) findViewById(R.id.btOpenSerialActivity);btn_serial.setOnClickListener(this);btn_parcel = (Button) findViewById(R.id.btOpenParcelActivity);btn_parcel.setOnClickListener(this);}// Serializeable传递对象的方法public void SerializeMethod() {Person mPerson = new Person();mPerson.setName("wulianghuan");mPerson.setAge(22);Intent mIntent = new Intent(this, SerialActivity.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("Think in java");mBook.setAuthor("stven");mBook.setPublishTime(2010);Intent mIntent = new Intent(this, ParcelActivity.class);Bundle mBundle = new Bundle();mBundle.putParcelable(PAR_KEY, mBook);mIntent.putExtras(mBundle);startActivity(mIntent);}// 铵钮点击事件响应public void onClick(View v) {if (v == btn_serial) {SerializeMethod();} else {PacelableMethod();}}}
SerialActivity.java:
package com.intent.activity;import com.intent.bean.Person;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class SerialActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView mTextView = new TextView(this);Person mPerson = (Person) getIntent().getSerializableExtra(MainActivity.SER_KEY);mTextView.setText("name: " + mPerson.getName() + " , "+ "age: " + mPerson.getAge());setContentView(mTextView);}}
ParcelActivity.java:
package com.intent.activity;import com.intent.bean.Book;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class ParcelActivity extends Activity {public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView mTextView = new TextView(this);Book mBook = (Book) getIntent().getParcelableExtra(MainActivity.PAR_KEY);mTextView.setText("name: " + mBook.getBookName() + " , "+ "Author: " + mBook.getAuthor() + " , " + "PublishTime: "+ 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:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btOpenSerialActivity" android:text="使用意图传递Serializable对象"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btOpenParcelActivity" android:text="使用意图传递Parcelable对象"/></LinearLayout>
AndroidManifest.xml文件(将两个新增的Activity,SerialActivity,ParcelActivity)声明一下 :
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.intent.activity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".MainActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SerialActivity"/> </application></manifest>
注意,我以前犯过一个错误,大半天才解决,就是实现Serializable接口的实体类,一定不能作为内部类,Person这个类不要写成内部类,否则会报错:
08-18 16:56:27.388: E/AndroidRuntime(23564): FATAL EXCEPTION: main
08-18 16:56:27.388: E/AndroidRuntime(23564): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.travel.caze.ui.widget.GalleryCreatorActivity$Person)
08-18 16:56:27.388: E/AndroidRuntime(23564): at android.os.Parcel.writeSerializable(Parcel.java:1181)
08-18 16:56:27.388: E/AndroidRuntime(23564): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.travel.caze.ui.widget.GalleryCreatorActivity$Person)
08-18 16:56:27.388: E/AndroidRuntime(23564): at android.os.Parcel.writeSerializable(Parcel.java:1181)
- 使用意图在Activity之间传递数据小插曲__传递对象
- Android入门篇二:使用意图在Activity之间传递数据
- 使用Bundle在Activity之间传递数据
- 使用Bundle在Activity之间传递数据
- 使用bundle在Activity之间传递数据
- 使用Intent在activity之间传递数据
- 使用全局变量在Activity之间传递数据
- 在Activity之间传递对象
- 在Activity之间传递数据
- Android Intent意图用于Activity之间的数据传递
- Intent 意图 用于Activity之间的数据传递
- Intent意图 用于Activity之间的数据传递
- Intent 意图 用于Activity之间的数据传递
- 使用Base Activity,以及如何在Activity之间传递数据
- 使用putExtra()在Activity和子Activity之间传递数据
- 通过全局对象在Activity之间传递数据
- 在安卓中使用Bundle在Activity之间传递数据
- Android入门篇四:使用剪切板在Activity之间传递对象数据
- 最长递减子序列[转载]
- 关于优化内存 提高软件运行效率的 写的真的很不错
- Spring JdbcTemplate小结
- 内存优化:SoftReference 和 WeakReference 软引用与弱引用
- 5款主流NoSQL数据库全方位横评
- 使用意图在Activity之间传递数据小插曲__传递对象
- spring 集成的项目,Properties配置文件外移
- 20人年的项目2个星期交接,你从哪里入手?
- java基础--->基本数据类型之间的转换
- 代码中配置log4j 参数
- Chromium for android 1 源码获取
- Spring MVC 学习笔记 json格式的输入和输出
- 使用ANT打包Android应用
- Ibatis,Spring整合(注解方式注入)