方式一 通过Intent进行数据传递(日后更新)

方式二 通过剪切板进行数据的传递

首先在第一个Activity中,设置所要进行传递的数据


/*** 通过剪贴板传递字符串数据的操作**/private void passingDataFunction() {final Intent intent = new Intent(IntentToDataActivity.this,IntentToDataActivity2.class);//获取剪切板的管理对象ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);//向剪切板中保存字符串clipboardManager.setText("通过剪切板传递的数据 、、、");startActivity(intent);}

那么在第二个activity中对应的接收数据的方法 为

 /*** 获取普通字符串的信息数据*/private void getClipboarDatas() {ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);//获取传递过来的字符串数据final String string = clipboardManager.getText().toString();}

可以看到通过这种方式进行数据的传递只是传递简单的字符串类型的了,当然也可以传输 boolean 与int 类型的,只不过是要进行一下数据类型的转换

下面是通过剪切板的方式传递对象数据信息的方法

基本的思路就 是将对象信息进行64位字节数据的转换为字符类型进行传递,然后再接收到,再转换回来

/*** 通过剪贴板传递对象数据的操作* 基本思路是先将对象信息通过64位编码方式转换成字符串,然后再进行数据的传递**/private void passingClassDataFunction() {final Intent intent = new Intent(IntentToDataActivity.this,IntentToDataActivity2.class);//获取剪切板的管理对象ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);//对象信息final Datas datas = new Datas();datas.id = "lk";datas.name = "dd";//将对象信息进行String类型的编码final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();String byte64String = " ";try {final ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(datas);//转换字符串byte64String = Base64.encodeToString(byteArrayOutputStream.toByteArray(),Base64.DEFAULT);objectOutputStream.close();} catch (IOException e) {e.printStackTrace();}//向剪切板中保存字符串clipboardManager.setText("通过剪切板传递的对象信息数据 、、、"+byte64String);startActivity(intent);}

那么在对应开启的activity中 对就的接收数据的方法为

/*** 获取对象的传递信息数据*/private void getClassClipboarDatas() {ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);//获取传递过来的字符串数据final String string = clipboardManager.getText().toString();//将获取的64位编码格式的String进行还原操作byte[] buffer = Base64.decode(string,Base64.DEFAULT);final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer);try {final ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);//将byte数据 还原成data对象信息IntentToDataActivity.Datas  datas = (IntentToDataActivity.Datas) objectInputStream.readObject();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}

方式三 通过静态变量进行数据的传递

方式四 通过全局变量进行数据的传递

方式五 通过EventBus进行数据的传递

使用方法:

第一步:引入EventBus

 compile 'org.greenrobot:eventbus:3.0.0'

第二步: 注册eventbus


public class MainActivity extends Activity {private Button btn, fragment_btn;private TextView service_tv;private TextView mainTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*** 进行注册*/EventBus.getDefault().register(this);btn = (Button) findViewById(R.id.btn);mainTextView = (TextView) findViewById(R.id.tv_main_show_information);/*** activity之间数据传递*/btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this,SecondActivity.class);startActivity(intent);}});/*** 与服务之间的数据传递*/startService(new Intent(this, EventTestService.class));}@Subscribepublic void onEventMainThread(UserEvent event) {mainTextView.setText(event.getUserName());}@Overrideprotected void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);}}

通过post方法发送相关数据

public class SecondActivity extends Activity {private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/*** 封装传递的数据*/final UserEvent ue = new UserEvent();ue.setUserName("142353");EventBus.getDefault().post(ue);finish();}});}
}
public class EventTestService extends Service {public EventTestService() {}@Overridepublic IBinder onBind(Intent intent) {return new Binder();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {new MyServerThread().start();return super.onStartCommand(intent, flags, startId);}class MyServerThread extends Thread {@Overridepublic void run() {EventBus.getDefault().post(new UserEvent("hi,我是Service"));}}
}

第三步:注销eventbus

在ondestroy方法中 进行注销

第四步:proguard-rules.pro文件中的操作


#EventBus-keepclassmembers class ** {public void onEvent*(**);void onEvent*(**);}

注:上面实例中使用到的UserEvent是封装数据的实体类

未完待续

Android 中activity中传递数据的方式相关推荐

  1. android 不同activity之间传递数据

    1> 不同activity之间传递数据: Intent intent=new Intent(); intent.setClass(activity1.this,activity2.class); ...

  2. android finish()传参数,48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参)...

    在 android 中多个 activity 中互相访问是常见的一种操作,比如:打开系统浏览器.显示系统拨号盘等等. 做这些操作的时候,自然是需要传递一些数据过去,比如:要打开的网址.要拨打的电话号码 ...

  3. Android TabHost中Activity之间传递数据

    例子1: TabHost tabhost = (TabHost) findViewById(android.R.id.tabhost);tabhost.setup(this.getLocalActiv ...

  4. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  5. 获取http请求中的参数控制器给jsp传递数据的方式

    这里写自定义目录标题 获取http请求中的参数 直接参数名获取 通过对象的方式获取 通过Servlet API方式获取 当请求中的参数和方法中参数名不一致 直接在url中获取参数的方式 控制器给jsp ...

  6. 通读《C++ primer plus》— C++中的5种数据类型转换方式

    通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...

  7. C#中窗体间传递数据的几种方法

    C#中窗体间传递数据的几种方法 在编写C#windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?以下是我整理的网上的各种方法,在遇到一个实际问题:在form1中打开一个fo ...

  8. [SpringBoot2]ajax函数中data参数的数据设置方式

    ajax函数中data参数的数据设置方式:

  9. PG中的几种数据类型转换方式

    PG中的几种数据类型转换方式 1.通过格式化函数进行转换 函数 返回类型 描述 示例 to_char(timestamp,text) text 把时间戳转换成字符串 to_char(current_t ...

  10. Android在Activity中动态增加xml自定义样式布局控件(引用xml布局文件和循环增加控件)

    工程目录: MainActivity package com.example.test1121;import androidx.appcompat.app.ActionBar; import andr ...

最新文章

  1. linux字符界面教程,打造字符界面的多媒体Linux系统
  2. apache php ffmpeg,linux(php环境) 安装ffmpeg
  3. Ubutu16.04+Cuda9.2/9.0+Cudnn7.12/7.05+TensorFlow-gpu-1.8/1.6
  4. VTK:图表之VisualizeGraph
  5. python之路---03 整型 bool 字符串 for循环
  6. 手把手教你用Jieba做中文分词
  7. LeetCode-Linked List Cycle II
  8. 已知坐标求方位角_震惊,up主居然能默写球坐标拉普拉斯算子!
  9. ASP.NET 2.0中直接将Access数据库导入到Excel文件中
  10. java第二章_Java第二章基本语法
  11. 【开发神器】自动化测试、用 Apipost!
  12. 图解通信原理与案例分析-12:无线调幅广播AM案例--模拟幅度调制与点对多点广播通信详解
  13. SQL Server代理(SQLEXPRESS)无法启动
  14. 代码:灰度重心法求激光中心线(matlab)
  15. XMind基础教程-主题篇
  16. 对于计算机学科的认识和一些感想
  17. oracle not in minus,Oracle Minus关键字 不包含...
  18. git 撤销刚才的rebase_从撤销 rebase 谈谈 git 原理
  19. 大数据与云计算学习计划 (一) 云计算系统管理 1 TCP/IP简单概念 (概念性)
  20. 查找磁盘占用最大的文件linux,linux查找系统中占用磁盘空间最大的文件

热门文章

  1. ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
  2. java activity生命周_关于Activity的生命周期和任务栈的理解
  3. 闲得无聊?不如用Python设计一个经典小游戏
  4. 3D建模如何学习,小白6个月入门工作?3D建模要学多久才能接外包私活?
  5. 画质评测|一次关于视频画质的探(zhǎn)讨(xiàn)
  6. 【TensorFlow】TensorFlow从浅入深系列之十三 -- 教你深入理解模型持久化(模型保存、模型加载)
  7. CVPR 2020 顶会 AI学术检索工具
  8. 重磅!浙大博士两破世界纪录,三年两获浙大竺可桢奖学金!
  9. php 日期format不要零_PHP格式化日期用法代码,包括前导零示例
  10. mysql 正则regrx_正则表达式