文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法

2022-06-06 09:08

关注

 Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口。下面我们以一个完整的例子来说明。

1.新建一个Android的工程,其中该工程的目录结构如下图:

2. 修改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="@string/hello" 
/> 
<Button 
android:id="@+id/serButton" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Serializable"/> 
<Button 
android:id="@+id/parButton" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Parcelable"/> 
</LinearLayout> 

3.在工程的src目录下新建一个实体类包,命名为com.andy.entity.同时在该package中添加两个实体类,一个是Person.java,该类实现Serializable接口;一个是Police.java,该类实现Parcelable接口。代码分别如下:


Person.java:
package com.andy.entity; 
import java.io.Serializable; 
public class Person implements Serializable { 
private static final long serialVersionUID = -6919461967497580385L; 
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; 
} 
} 
Police.java:
[c-sharp] view plain copy
package com.andy.entity; 
import android.os.Parcel; 
import android.os.Parcelable; 
public class Police implements Parcelable { 
private String name; 
private int workTime; 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public int getWorkTime() { 
return workTime; 
} 
public void setWorkTime(int workTime) { 
this.workTime = workTime; 
} 
public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() { 
@Override 
public Police createFromParcel(Parcel source) { 
Police police = new Police(); 
police.name = source.readString(); 
police.workTime = source.readInt(); 
return police; 
} 
@Override 
public Police[] newArray(int size) { 
return new Police[size]; 
} 
}; 
@Override 
public int describeContents() { 
return 0; 
} 
@Override 
public void writeToParcel(Parcel parcel, int flags) { 
parcel.writeString(name); 
parcel.writeInt(workTime); 
} 
}

4.在包com.andy.testdemo中修改TestActivity.java类,同时在该包中添加类SerializableDemo和ParcelableDemo,分别继承了Activity类和分别显示Person对象和Police对象的数据。代码如下:


package com.andy.testdemo; 
import com.andy.entity.Person; 
import com.andy.entity.Police; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
public class TestActivity extends Activity { 
private Button sButton,pButton; 
public final static String SER_KEY = "com.andy.ser"; 
public final static String PAR_KEY = "com.andy.par"; 
 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
sButton = (Button)findViewById(R.id.serButton); 
sButton.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
SerializeMethod(); 
} 
}); 
pButton = (Button)findViewById(R.id.parButton); 
pButton.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
PacelableMethod(); 
} 
}); 
} 
 
private void SerializeMethod(){ 
Person mPerson = new Person(); 
mPerson.setName("andy"); 
mPerson.setAge(26); 
Intent mIntent = new Intent(this,SerializableDemo.class); 
Bundle mBundle = new Bundle(); 
mBundle.putSerializable(SER_KEY,mPerson); 
mIntent.putExtras(mBundle); 
startActivity(mIntent); 
} 
 
private void PacelableMethod(){ 
Police mPolice = new Police(); 
mPolice.setName("I am Police"); 
mPolice.setWorkTime(2008); 
Intent mIntent = new Intent(this,ParcelableDemo.class); 
Bundle mBundle = new Bundle(); 
mBundle.putParcelable(PAR_KEY, mPolice); 
mIntent.putExtras(mBundle); 
startActivity(mIntent); 
} 
}

SerializableDemo.java类


package com.andy.testdemo; 
import com.andy.entity.Person; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class SerializableDemo extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
TextView mTextView = new TextView(this); 
Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY); 
mTextView.setText("You name is: " + mPerson.getName() + "/n"+ 
"You age is: " + mPerson.getAge()); 
setContentView(mTextView); 
} 
}

ParcelableDemo.java类:


package com.andy.testdemo; 
import com.andy.entity.Police; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class ParcelableDemo extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
TextView mTextView = new TextView(this); 
Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY); 
mTextView.setText("Police name is: " + mPolice.getName()+"/n"+ 
"WorkTime is: " + mPolice.getWorkTime() + "/n"); 
setContentView(mTextView); 
} 
} 

5.在AndroidManifest.xml文件中为新添加的两个Activity进行注册。


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.andy.testdemo" 
android:versionCode="1" 
android:versionName="1.0"> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
<activity android:name=".TestActivity" 
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=".SerializableDemo"/> 
<activity android:name=".ParcelableDemo"/> 
</application> 
<uses-sdk android:minSdkVersion="8" /> 
</manifest> 

6.运行程序查看效果图:

【1】主界面截图:


【2】点击Serializable按钮的效果


【3】点击Parcelable按钮的效果

=========================================================================
以上是如何采用Intent在不同的Activity之间传递对象的例子。

您可能感兴趣的文章:Android Parcelable与Serializable详解及区别Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍Android中Serializable和Parcelable序列化对象详解Android中Intent传递对象的两种方法Serializable,ParcelableAndroid序列化之Parcelable和Serializable的使用详解


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯