付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android编程如何实现全局获取Context及使用Intent传递对象
这篇文章主要介绍Android编程如何实现全局获取Context及使用Intent传递对象,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、全局获取ContextAndroid开发中很多地方需要用到Context,比如弹出Toast、启动活动、发送广播、操作数据库……由于很多操作都是在活动中进行的,而活动本身就是一个Context对象,所以获取Context并不是那么困难。但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离Activity类,由此在某些情况下,获取Context并非那么容易。Android提供了一个Application类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的Application类,以便管理程序内一些全局的状态信息,比如说全局Context。public
class
MyApplication
extends
Application
{
private
static
Context
context;
@Override
public
void
onCreate()
{
super.onCreate();
context
=getApplicationContext();
}
public
static
Context
getContext()
{
return
context;
}
}这里我们重写了父类的onCreate()方法,并通过调用getApplicationContext()方法得到了一个应用程序级别的Context,然后又提供了一个静态的getContext()方法,在这里将刚才获取到的Context进行返回。接下来需要告知系统,当程序启动的时候应该初始化MyApplication类,在AndroidManifest文件的<application>标签下进行指定就可以了。<application
android:name="MyApplication">
...
</application>这样就已经实现了一种全局获取Context的机制,之后不管你想在项目的任何地方使用Context,只需要调用一下MyApplication.getContext()就可以了。复制代码代码如下:Toast.makeText(MyApplication.getContext(),"全局Context获取成功",Toast.LENGTH_SHORT).show();二、使用Intent传递对象使用Intent来传递对象通常有两种实现方式,Serializable和Parcelable。Serializable方式:Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serizable这个接口就可以了。public
class
Festival
implements
Serializable
{
private
String
name;
private
String
data;
public
Festival(String
name,String
data){
=
name;
this.data
=
data;
}
public
String
getName()
{
return
name;
}
public
String
getData()
{
return
data;
}
}这里让Festival类实现了Serializable接口,这样所有的Festival对象就都是可以序列化的了。Festival
festival
=
new
Festival("元旦节","1月1日");
Intent
intent
=
new
Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("festival_object",festival);
startActivity(intent);这里我们创建了一个Festival的实例,然后就直接将它传入到putExtra()方法中,通过startActivity()传递这个对象。复制代码代码如下:Festivalfestival=(Festival)getIntent().getSerializableExtra("festival_object");这里调用了getSerializableExtra()方法来获取传递过来的序列化对象,接着再将它向下转型成Festival对象,这样就成功实现了使用Intent传递对象的功能了。Parcelable方式:Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。public
class
Person
implements
Parcelable
{
private
String
name;
private
int
age;
//省略set和get方法
protected
Person(Parcel
in)
{
name
=
in.readString();//读取name
age
=
in.readInt();//读取age
}
public
static
final
Creator<Person>
CREATOR
=
new
Creator<Person>()
{
@Override
public
Person
createFromParcel(Parcel
in)
{
return
new
Person(in);
}
@Override
public
Person[]
newArray(int
size)
{
return
new
Person[size];
}
};
@Override
public
int
describeContents()
{
return
0;
}
@Override
public
void
writeToParcel(Parcel
dest,
int
flags)
{
dest.writeString(name);//写出name
dest.writeInt(age);//写入age
}
}首先让Person类实现Parcelable接口,这样就必须重写describeContents()和writeToParcel()这两个方法。其中describeContents()方法直接返回0就可以了,而writeToParcel()方法中需要调用Parcel的writeXxx()方法将Person类中的字段一一写出。除此之外,还必须在Person类中提供一个名为CREATOR的常量,这里创建了Parcelable.Creator接口的一个实现,并将泛型指定为Person。接着需要重写createFromParcel()和newArray()这两个方法,在createFromParcel()方法中去读取刚才写出的name和age字段,并创建一个Person对象进行返回,其中name和age都是调用Parcel的readXxx()方法读取到的,注意这里的读取顺序一定要和写出顺序完全相同。而newArray()方法中只需要new出一个Person数组,并使用方法中传入的size作为数组大小就可以了。Person
person
=
(Person)getIntent().getParcelableExtra("person_object");依然可以使用相同的代码来传递Person对象,只不过获取对象时调用的是getParcelableExtra()方法,其他地方完全相同。在传递对象时,Serializa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业营销部工作制度
- 五公镇邹村工作制度
- 4天8小时工作制度
- 专业群调研工作制度
- 亮甲店社区工作制度
- 脑外科患者的引流管护理
- 办公室外联工作制度
- 加气站反恐工作制度
- 医学设备科工作制度
- 医院ab角工作制度
- 自考写作考试真题及答案
- 2025年初级(五级)保育师(保育)技能鉴定《理论知识》真题(答案和解析附后)
- 氮气安全培训课件
- DB63-T 1599-2025 高海拔高寒地区公路边坡生态防护技术设计规范
- 老龄化时代2025年老年教育课程设置与教学方法创新研究:实践探索
- 冠心病常见药物健康知识
- 车间6S管理培训
- 2025年内蒙古医师协会医师定考考核试题
- CJ/T 3063-1997给排水用超声流量计(传播速度差法)
- 某某夜市卫生管理制度
- 2025-2030年中国硝苯地平行业市场现状供需分析及投资评估规划分析研究报告
评论
0/150
提交评论