使用Intent数据传递实用五部曲
来源:互联网 发布:伪造公司印章软件 编辑:程序博客网 时间:2024/04/27 23:47
(一)使用Intent对象进行数据传递
方法步骤:
1.在源Activity中new一个Intent对象,并调用它的putExpra()方法写入要传递的数据;
2. Intent对象调用它的setClass(源Activity.this , 目标Activity.class) 告诉Intent对象要传递到哪里,然后,startActivity(mIntent);
3. 然后在目标Activity中声明Intent对象并将getIntent()赋值给它,有点类似于网络通信中的Secoket套接字,然后,调用getXXXExpra()方法获取保存的数据的方法来实现Intent数据传递;
4. 源码如下:
MainActivity.java
Button mButton= (Button) findViewById(R.id.myButton); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent mIntent = new Intent(); /** * 通过Intent类中的putExtra方法可以将简单的数据类型和序列化对象保存到Intent对象中 */ mIntent.putExtra("age", 12); mIntent.putExtra("name", "小李"); mIntent.putExtra("address", "上海"); mIntent.setClass(MainActivity.this, OtherActivity.class); //启动意图 startActivity(mIntent); } });
目标Activity————-OtherActivity.java
private TextView mtTextView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); /** * 使用Intent的putExprd()保存数据 跟 getXXXExpra()方法获取保存的数据的方法来实现Intent数据传递 */ mtTextView = (TextView) findViewById(R.id.msg); Intent intent = getIntent(); int age = intent.getIntExtra("age", 0); String name = intent.getStringExtra("name"); String address = intent.getStringExtra("address"); mtTextView.setText("age--->>" + age + "\n" + "name-->>" + name + "\n" + "address->>" + address); }
(二)通过静态变量传递数据
1.为什么要使用静态变量传递数据?
说明:使用Intent可以很方便在不同的Activity之间传递数据,这个也是官方推荐的方式,但是也有一定的局限性,就是Intent无法传递不能序列化的对象。我们可以使用静态变量来解决这个问题;
2.跟Intent数据传递的方法类似,只是在源Activity中使用目标Activity的类直接访问自己定义的Static成员变量来进行直接赋值的(使用的语法是静态成员变量可以直接通过自己的类名来进行调用).
3.源代码如下:
MainActivity.java
/** * 我们可以使用静态变量来Intent无法传递不能序列化的对象的 * 问题 */ Button staButton=(Button) findViewById(R.id.staticButton); staButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent staIntent = new Intent(); staIntent.setClass(MainActivity.this, StaticIntentTest.class); StaticIntentTest.name="AC"; StaticIntentTest.age = 12; startActivity(staIntent); } });
目标Activity————-StaticIntentTest.java
/** * 通过使用static变量来解决Intent方法传递非序列元数据的问题 * @author Administrator * */public class StaticIntentTest extends Activity { /** * 在此申明静态变量name 和 age */ public static String name; public static int age; /** * 非序列化数据的TextView声明 */ private TextView staTextView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Log.i("xys", "onCreate Method is executed"); setContentView(R.layout.other); /** * 使用在目标Activity声明静态属性的方法来实现Intent非序列化数据的传递 */ staTextView = (TextView) findViewById(R.id.staticmsg); staTextView.setText("-name->>"+name+"\n"+"-age-->>"+age); }
(三)通过剪切板传递数据
1. 什么是剪切板技术
在Activity之间数据传递还可以利用一些技巧,不管是Windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取数据。 2.使用的方法步骤: (1)使用Serializable接口将数据序列化; (2)将数据对象转化为字符串,并保存到剪切板中; (3)从剪切板中拿出并解码,还原数据对象; (4)程序运行流程图如下:
3.代码如下:
MainActivity.java
/** * * 使用剪切板技术来实现activity之间数据的传递 * (注:剪切板技术是一个通用的数据传递技术,比如:手机中复制文字或者图片等,不同的activity中均有这个功能并且数据共享; */ Button clipboardButton = (Button) findViewById(R.id.ClipboardButton); clipboardButton.setOnClickListener(new OnClickListener() { MyData myData = new MyData("Blue", 15); //将对象转化为字符串 ByteArrayOutputStream mArrayOutputStream = new ByteArrayOutputStream();//生成一个字节数组对象 String base64String = ""; try { //将字节数组对象赋值给ObjectOutputStream对象 ObjectOutputStream mObjectOutputStream = new ObjectOutputStream(mArrayOutputStream); //ObjectOutputStream对象调用它的writeObject()方法将数据对象写入ObjectOutputStream流内; mObjectOutputStream.writeObject(myData); //按照Base64的格式对已经转化为字节数组(通过调用toByteArray())的字节数组输出流mArrayOutputStream对象进行编码(成为字符串) base64String = Base64.encodeToString(mArrayOutputStream.toByteArray(), Base64.DEFAULT); mObjectOutputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ClipboardManager mClipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); mClipboardManager.setText(base64String); Intent mIntent = new Intent(MainActivity.this , ClipboardActivity.class); startActivity(mIntent); } });
继承自Application的数据资源文件Myapp.java
package com.example.intenttest;/** * 通过使用全局对象Application来实现Activity间数据的传递 * @author Administrator * */import android.app.Application;public class MyApp extends Application { public String name; public int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); setName("Per"); }}
目标Activity文件GlobalActivity.java
package com.example.intenttest;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;/** * 通过使用全局对象Application来实现Activity间数据的传递 * @author Administrator * */public class GlobalActivity extends Activity { private MyApp myApp; private TextView glTextView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.other); glTextView = (TextView) findViewById(R.id.GlobalTextView); //myApp = (MyApp) getApplication(); myApp=(MyApp) getApplication(); glTextView.setText("-----appName-----" + myApp.getName()+"\n"+"====appAge====="+myApp.getAge()); }}
(五)使用Intent的方式传递数据并返回结果
在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递数据类似,也可以采用前面4种方法,但是一般建议采用Intent对象的方式来返回数据,使用这种方式返回数据,需要使用startActivityForResult方法来显示Activity。
使用Intent的方式传递并返回数据的方法步骤:
1)声明需要传递的类型,然后,老规矩调用Intent的putExpra()方法将数据保存到Intent中,最后,启动带返回值的Activity————startActivityForResult();
2)启动Intent后,在目标Activity中生成Intent对象,并getIntent()后,然后声明与传递过来的数据类型相同的变量,并调用getXXXExtra()来获取传递过来的数据;
3)获取完成以后,重新new一个新的Intent对象后,调用它的putExpra()方法,并将新的变量传递进去后,“被叫”Intent(类比打电话)通过setResult()将结果返回去,并调用finish()结束本次Activity;
4)回调在“主叫”中Intent的onActivityResult()方法对结果进行处理;
注意:(1)触发onActivityResult()方法返回结果条件是必须requestCode>= 0 方可,看下面的Android API文档: (红色部分) 随着Activity启动模式的不同方法执行的顺序会不同,这是后话;
运行结果如下:
输入任意俩个数值后,点击计算结果后,会跳转到目标Activty,然后将结果输入后,点“返回结果”,又会回到主Activity,并显示结果;
源码下载地址:
http://download.csdn.net/download/makeyourchance/9540624
- 使用Intent数据传递实用五部曲
- 使用Intent传递数据
- 使用intent相互传递数据
- 【Android】使用Intent传递数据
- 使用Intent传递对象数据
- 【Android 开发教程】使用Intent传递数据
- android 使用Intent传递数据之剪切板
- 【Android】Intent中使用Extra传递数据
- 【Android】使用Intent实现数据传递
- 使用Intent和Bundle的数据传递
- 使用Intent在activity之间传递数据
- Android—使用Intent传递数据
- 使用Intent传递数据之返回结果
- 使用Intent启动Activity传递数据
- 2.3 使用intent对象传递数据
- Android使用intent、bundle传递数据
- Intent使用Serializable以及Parcelable传递数据
- 使用Intent在活动间传递数据
- ipv6 自从6月1号开始Appstore的审核需要支持ipv6
- 关于模块外壳地和信号地的处理及原因
- 通过GitHub网站发布网页
- JS代码放在head和body中的区别分析
- 准确计算oracle表分区记录数
- 使用Intent数据传递实用五部曲
- Json字符串转成List对象
- JAVA大数处理(BigInteger,BigDecimal)
- java基础知识---jdk5新特性
- OpenGL学习脚印: 视变换(view transformation)
- Uart_GetString / Uart_GetIntNum / WrUart / atoi /
- Unity 5 官方打包管理工具 Asset Bundle Manager
- Guice注入--Properties
- UIView+Extension"推出视图"