【移动应用开发技术】Android编程如何实现全局获取Context及使用Intent传递对象_第1页
【移动应用开发技术】Android编程如何实现全局获取Context及使用Intent传递对象_第2页
【移动应用开发技术】Android编程如何实现全局获取Context及使用Intent传递对象_第3页
【移动应用开发技术】Android编程如何实现全局获取Context及使用Intent传递对象_第4页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论