`

使用Intent 在Activity 之间传递参数

阅读更多

在不同的Activity 之间传递参数主要有四种方式:

1. 通过Intent 传递数据

    这是最为常用的参数传递方式,但是被传递的字段或者类都必须实现serializabel 接口

 

public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		switch (id) {
		case R.id.action_new :
			Toast.makeText(this, "create a new file", Toast.LENGTH_SHORT).show();
			
			Intent msgIntent = new Intent(this, MessageActivity.class);
			/**
			 * 使用Intent传递数据:方案一
			 * 前提和局限性: 传递的参数对象必须实现了序列化  serializable interface
			 */
			msgIntent.putExtra("flag", true);
			msgIntent.putExtra("intentName", "MsgIntent");
			SimpleData simpleData = new SimpleData(199938L, "Test Data");
			msgIntent.putExtra("simpleData", simpleData);
			startActivity(msgIntent);
			break;
		case R.id.action_save :
			Toast.makeText(this, "save the file", Toast.LENGTH_SHORT).show();
			break;
		case R.id.action_settings :
			Toast.makeText(this, "The whole setting", Toast.LENGTH_SHORT).show();
			break;
		case R.id.action_about :
			Toast.makeText(this, "show the about message", Toast.LENGTH_SHORT).show();
			break;
		default:
			Toast.makeText(this, "do nothing", Toast.LENGTH_SHORT).show();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

 

方法中使用的JavaBean

/**
 * 
 */
package org.navis.heard.bean;

import java.io.Serializable;

/**
 * Intent 之间传递参数时用到 的 javabean ,
 * 局限性为:必须实现了序列化接口
 * @author navis
 *
 */
public class SimpleData implements Serializable {
	/**
	 * SerialVersionUID
	 */
	private static final long serialVersionUID = -2643114286876340652L;
	private long id;
	private String dataName;

	public SimpleData() {
		super();
	}

	public SimpleData(long id, String dataName) {
		super();
		this.id = id;
		this.dataName = dataName;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getDataName() {
		return dataName;
	}

	public void setDataName(String dataName) {
		this.dataName = dataName;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public String toString() {
		return "SimpleData [id=" + id + ", dataName=" + dataName + "]";
	}
}

 

 

2. 使用静态变量传递数据

    使用静态变量和JavaEE 中使用的静态变量的方式相同,但是如果项目中使用大量的静态变量会使项目难于维护。

 

3. 通过剪贴板(Cilpboard)传递数据

    剪切板只能存储简单类型数据或者可序列化的对象,对于某些不可序列化的对象如果可以将其转换成字节流(字节数组),也可以将这些对象保存到剪贴板中。

    传输对象

/**
	 * @author navis
	 *
	 */
	private class Data{
		private int id;
		private String name;
		
		public Data(int id, String name) {
			super();
			this.id = id;
			this.name = name;
		}

		@Override
		public String toString() {
			return "Data [id=" + id + ", name=" + name + "]";
		}
	}

    将对象存储到剪贴板中

Data data = new Data(222, "222");
		//获取系统剪贴板对象
		ClipboardManager clipboardManager = (ClipboardManager) 
				getSystemService(Context.CLIPBOARD_SERVICE);
		
		//通过流 将对象写入流 并对字节流进行加密
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		String base64Str = "";
		
		try {
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
			//将data对象写入对象输出流
			objectOutputStream.writeObject(data);
			//将对象字节流进行编码
			base64Str = Base64.encodeToString(arrayOutputStream.toByteArray(), Base64.DEFAULT);
			
			objectOutputStream.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//获取存储数据的剪贴板数据对象
		ClipData clipData = ClipData.newPlainText("data", base64Str);
		//设置主剪贴板
		clipboardManager.setPrimaryClip(clipData);

    通过剪贴板获取对象

//从剪贴板中获取对象
		
		//获取系统剪贴板对象
		ClipboardManager clipboardManager = (ClipboardManager) 
				getSystemService(Context.CLIPBOARD_SERVICE);
		//获取编码后的字符串
		String resultString = clipboardManager.getPrimaryClip()
				.getItemAt(0).getText().toString();
		
		byte[] buffer = Base64.decode(resultString, Base64.DEFAULT);
		
		ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(buffer);
		
		ObjectInputStream objectInputStream;
		try {
			objectInputStream = new ObjectInputStream(arrayInputStream);
			Data outData = (Data) objectInputStream.readObject();
			outData.toString();
		} catch (IOException | ClassNotFoundException e) {
			e.printStackTrace();
		}

 

 

4. 通过全局对象传递数据

 

 

分享到:
评论

相关推荐

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的Activity,拨打电话,以及在两个Activity之间传递参数。 首先,让我们讨论如何使用Intent打开另一个Activity。在Android中,Activity是用户界面的...

    两个Activity之间传递参数的代码

    本篇文章将详细讲解如何在Android的两个Activity之间传递参数,并通过给出的`LoginActivity.java`和`MainActivity.java`两个文件为例进行说明。 首先,我们要了解在Android中,有两种主要的方式来传递数据: 1. ...

    android 利用intent调用activity 简明精炼的例子

    现在,关于"e_5_1 Chat Activities"这个压缩包文件,虽然没有具体的内容展示,但我们可以推测它可能包含了一个聊天应用相关的例子,演示了如何通过Intent在不同聊天Activity之间切换,同时传递和接收聊天消息。...

    intent 跳转实现activity之间传参

    本篇文章将详细讲解如何通过Intent实现Activity之间的参数传递。 一、Intent的基本概念 Intent是一个消息对象,它封装了组件间的交互信息。在Android中,当我们想要从一个Activity跳转到另一个Activity时,就需要...

    Eclipse编写的Android Activity之间简单地传递参数应用实例

    本实例将深入讲解如何在Eclipse V4.2.0环境下,使用Intent对象来实现在Android Activity之间简单地传递参数。 首先,我们需要了解Intent的作用。Intent在Android系统中扮演着消息传递的角色,它能够启动新的...

    Activity之间的相互调用与传递参数

    本篇文章将深入探讨Activity间的通信机制以及如何在调用过程中传递参数。 首先,我们来看Activity的启动模式。Android提供了四种基本的启动模式:标准模式(Standard)、单实例模式(SingleTop)、单任务模式...

    安卓体重计算器java源程序 使用Intent在Activity间传输数据

    4. **启动新Activity并传递数据**:使用`startActivity()`方法启动新Activity,并将Intent作为参数传递。 ```java startActivity(intent); ``` 5. **在目标Activity中接收数据**:在目标Activity中,可以通过`...

    Android开发 两个Activity之间通过Intent跳转传值

    本文将深入探讨如何在两个Activity之间通过Intent进行数据传递。 首先,理解Intent的基本概念。Intent是一个意图对象,它表达了应用程序想要执行的动作(如打开一个网页、拨打电话)以及可能涉及到的数据。在...

    Activity 间intent传递有序排序的map集合

    在这个场景中,我们关注的是如何在Activity之间通过Intent传递一个有序且可排序的Map集合。理解这个知识点对于优化应用的数据传输流程至关重要。 首先,Map接口在Java中提供了若干实现类,如HashMap、LinkedHashMap...

    Android 中Activity 之间传递参数

    Android 中Activity 之间传递参数 ...Android 中Activity 之间传递参数可以使用 Intent 对象来传递简单数据、Bundle 对象来传递数据包、自定义类来传递值对象。这些方法可以满足我们在 Android 应用程序开发中的需求。

    Android Activity之间的跳转以及传递参数源代码下载

    当数据量较大或者需要在多个Activity之间共享时,可以考虑使用Parcelable接口或Serializable接口来实现对象的序列化,然后通过Intent传递。 关于Parcelable接口,它提供了比Serializable更高的序列化性能,适用于...

    Activity跳转时传递Bitmap对象

    在Activity间传递Bitmap,有两种主要方式:Intent extras和使用Parcelable接口。由于Bitmap对象较大,直接通过Intent的extras传递可能会导致内存溢出,因为Intent的大小有限制。因此,更推荐使用Parcelable接口。 1...

    诠释Android中Activity间的参数互传

    本篇文章将深入探讨如何在Android的Activity之间传递参数,帮助开发者更好地理解和运用这一关键机制。 一、Intent:数据传递的载体 在Android中,Intent不仅用于启动一个Activity,还可以承载数据进行传输。我们...

    Android 开发Activity基础 启动和跳转并传递参数

    除了通过Intent传递参数外,Activity间还可以通过startActivityForResult()进行回调通信,或者使用BroadcastReceiver、EventBus、LiveData等组件进行更复杂的异步通信。 总结,Android的Activity是应用程序的核心...

    Android intent之间复杂参数传递方法详解

    Intent是Activity与Activity之间,Activity与Service之间传递参数的介质,而这两种通常实现的是Java基本对象类型和String的传递。 在实际项目中,页面之间传值,除了以上几种,经常还有传递Object对象、List类型、...

    实验八 使用Intent回传数据

    本实验的主题“使用Intent回传数据”聚焦于如何通过Intent对象在活动(Activity)之间进行数据的传递,这对于理解和构建复杂的Android应用程序至关重要。 1. **Intent基础**: Intent主要分为显式Intent和隐式...

    android-GridView-事件-Intent-传递参数1.rar

    下面将详细讨论`GridView`、事件处理、`Intent`以及如何在它们之间传递参数。 1. **GridView**: GridView继承自AbsListView,它以行列形式显示数据。默认情况下,每个单元格是水平和垂直居中的,可以根据需要自定义...

    Android通过Intent传递数据

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间传递信息和启动操作。它扮演着应用程序内部通信的重要角色,特别是在活动(Activity)之间。"Android通过Intent传递数据"这一主题,涵盖了Intent的基本...

Global site tag (gtag.js) - Google Analytics