Android 开发Activity之间传递数据的几种方式.docx

上传人:b****8 文档编号:11423047 上传时间:2023-03-01 格式:DOCX 页数:5 大小:16.22KB
下载 相关 举报
Android 开发Activity之间传递数据的几种方式.docx_第1页
第1页 / 共5页
Android 开发Activity之间传递数据的几种方式.docx_第2页
第2页 / 共5页
Android 开发Activity之间传递数据的几种方式.docx_第3页
第3页 / 共5页
Android 开发Activity之间传递数据的几种方式.docx_第4页
第4页 / 共5页
Android 开发Activity之间传递数据的几种方式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Android 开发Activity之间传递数据的几种方式.docx

《Android 开发Activity之间传递数据的几种方式.docx》由会员分享,可在线阅读,更多相关《Android 开发Activity之间传递数据的几种方式.docx(5页珍藏版)》请在冰豆网上搜索。

Android 开发Activity之间传递数据的几种方式.docx

Android开发Activity之间传递数据的几种方式

【Android开发】Activity之间传递数据的几种方式

在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式。

1.使用Intent来传递数据

Intent表示意图,很多时候我们都会利用Android的Intent来在各个Activity之间传递数据,这也是Android比较官方的一种数据传递的方式

需求1:

从一个Activity(IntentDemo)跳转到另外一个Activity(Other),其中利用Intent来传递数据

程序Demo如下:

IntentDemo.java

[java]viewplaincopypackagecom.android.intentdemo;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;publicclassIntentDemoextendsActivity{privateButtonbutton;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);initComponent();button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Intentintent=newIntent(IntentDemo.this,Other.class);//在Intent中传递数据intent.putExtra("name","AHuier");intent.putExtra("age",22);intent.putExtra("address","XiaMen");//启动IntentstartActivity(intent);}});}privatevoidinitComponent(){button=(Button)findViewById(R.id.button);}}

other.java

[java]viewplaincopypackagecom.android.intentdemo;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.TextView;publicclassOtherextendsActivity{privateTextViewtextView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);initComponent();Intentintent=getIntent();intage=intent.getIntExtra("age",0);Stringname=intent.getStringExtra("name");Stringaddress=intent.getStringExtra("address");textView.setText("Myageis"+age+"\n"+"Mynameis"+name+"\n"+"Myaddress"+address);}privatevoidinitComponent(){textView=(TextView)findViewById(R.id.msg);}}

——>

2.在Activity之间使用静态变量传递数据

在上例中使用Intent可以很方便的在不同的Activity之间传递数据,这个也是官方推荐的方式,但是也有一定的局限性,就是Intent无法传递不能序列化的对象。

我们可以使用静态变量来解决这个问题。

需求1:

从一个Activity(IntentDemo)跳转到另外一个Activity(Other),其中利用静态变量来传递数据程序Demo:

IntentDemo.java

[java]viewplaincopyIntentintent=newIntent();intent.setClass(IntentDemo.this,Other.class);Other.age=22;Other.name="AHuier";Other.address="XiaMen";startActivity(intent);

Other.java[java]viewplaincopyprivateTextViewtextView;publicstaticintage;publicstaticStringname;publicstaticStringaddress;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);initComponent();textView.setText("Myageis"+age+"\n"+"Mynameis"+name+"\n"+"Myaddress"+address);}——>3.通剪切板传递数据

在Activity之间数据传递还可以利用一些技巧,不管是Windows还是Linux操作系统,都会支持一种剪切板的技术,也就是一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取数据。

1)利用剪切板传递普通的数据,如字符串需求1:

从一个Activity(IntentDemo)跳转到另外一个Activity(Other),通过剪切板传递数据

程序Demo:

IntentDemo.java[java]viewplaincopyClipboardManagerclipboardManager=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);Stringname="AHuier";clipboardManager.setText(name);Intentintent=newIntent(IntentDemo.this,Other.class);startActivity(intent);Other.java

[java]viewplaincopyClipboardManagerclipboardManager=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);StringmsgString=clipboardManager.getText().toString();textView.setText(msgString);

——>1)利用剪切板传递复杂的数据,如对象

需求1:

从一个Activity(IntentDemo)跳转到另外一个Activity(Other),通过剪切板传递数据

新建一个MyData.java

[java]viewplaincopypackagecom.android.intentdemo;importjava.io.Serializable;publicclassMyDataimplementsSerializable{privateStringname;privateintage;publicMyData(Stringname,intage){super();this.name=name;this.age=age;}//提供一个toString()方法@OverridepublicStringtoString(){return"MyData[name="+name+",age="+age+"]";}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}IntentDemo.java[java]viewplaincopyMyDatamyData=newMyData("AHuier",22);//将对象转换成字符串ByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();Stringbase64String="";try{ObjectOutputStreamobjectOutputStream=newObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(myData);//使用Android中提供的Base64工具类,这个类主要是用来对对象进行压缩也解码的过程,使用默认方式base64String=Base64.encodeToString(byteArrayOutputStream.toByteArray(),Base64.DEFAULT);objectOutputStream.close();}catch(Exceptione){//TODO:

handleexception}ClipboardManagerclipboardManager=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);clipboardManager.setText(base64String);Intentintent=newIntent(IntentDemo.this,Other.class);startActivity(intent);

Other.java

[java]viewplaincopyClipboardManagerclipboardManager=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);StringmsgString=clipboardManager.getText().toString();//将字符串msgString还原为对象byte[]base64_byte=Base64.decode(msgString,Base64.DEFAULT);ByteArrayInputStreambyteArrayInputStream=newByteArrayInputStream(base64_byte);try{ObjectInputStreamobjectInputStream=newObjectInputStream(byteArrayInputStream);MyDatamyData=(MyData)objectInputStream.readObject();textView.setText(myData.toString());}catch(Exceptione){//TODO:

handleexception}

——>

 

4.Intent中使用全局变量来传递数据

 

需求1:

从一个Activity(Main)跳转到另外一个Activity(Other),通过全局变量来传递数据

 

Main.java

[java]viewplaincopyprivateButtonbutton;privateMyAppmyApp;...myApp=(MyApp)getApplication();myApp.setName("kunhuixu");//修改之后的名称Intentintent=newIntent(Main.this,Other.class);startActivity(intent);

Other.java

[java]viewplaincopyprivateMyAppmyApp;privateTextViewtextView;...myApp=(MyApp)getApplication();textView.setText("---Theappname---"+myApp.getName());

MyApp.java

[java]viewplaincopypackagecom.android.intentglobal;importandroid.app.Application;/**查看Android官方文档。

*Application是所有那些需要维护全局application状态的基类。

你可以提供你自己的实现机制通过在在AndroidManifest.xml中提供你自己的需要声明*的标记你自己的标签。

*onCreate()方法是在应用程序启动的时候被回调的。

*/publicclassMyAppextendsApplication{publicStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}@OverridepublicvoidonCreate(){//TODOAuto-generatedmethodstubsuper.onCreate();setName("AHuier");}}

AndroidManifest.xml

 

[html]viewplaincopy<applicationandroid:

name=".MyApp"android:

icon="@drawable/ic_launcher"android:

label="@string/app_name"><activityandroid:

name="com.android.intentglobal.Main"android:

label="@string/app_name"><intent-filter><actionandroid:

name="android.intent.action.MAIN"/><categoryandroid:

name="android.intent.category.LAUNCHER"/></intent-filter></activity><activityandroid:

name="com.android.intentglobal.Other"></activity></application>

[注意]:

使用android:

name=".MyApp"来指定全局变量名称。

 

——>未完待续,持续更新中......

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1