Android 中activity中传递数据的方式
来源:互联网 发布:苹果电脑双系统卸载mac 编辑:程序博客网 时间:2024/05/18 01:14
方式一 通过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); }
/** * 获取普通字符串的信息数据 */ 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; @Override protected 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() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); /** * 与服务之间的数据传递 */ startService(new Intent(this, EventTestService.class)); } @Subscribe public void onEventMainThread(UserEvent event) { mainTextView.setText(event.getUserName()); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }}通过post方法发送相关数据
public class SecondActivity extends Activity { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /** * 封装传递的数据 */ final UserEvent ue = new UserEvent(); ue.setUserName("142353"); EventBus.getDefault().post(ue); finish(); } }); }}public class EventTestService extends Service { public EventTestService() { } @Override public IBinder onBind(Intent intent) { return new Binder(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { new MyServerThread().start(); return super.onStartCommand(intent, flags, startId); } class MyServerThread extends Thread { @Override public void run() { EventBus.getDefault().post(new UserEvent("hi,我是Service")); } }}
第三步:注销eventbus在ondestroy方法中 进行注销
第四步:proguard-rules.pro文件中的操作
#EventBus -keepclassmembers class ** { public void onEvent*(**); void onEvent*(**); }注:上面实例中使用到的UserEvent是封装数据的实体类
未完待续
0 0
- Android 中activity中传递数据的方式
- Android中activity间数据传递方式
- android中activity之间传递数据的3种方式
- android中intent传递数据的方式
- Android中各个Activity中数据的传递
- android activity之间数据的传递方式
- android activity之间传递数据的方式
- Android中2个activity之间的数据传递方法
- android中activity之间数据通过Intent的传递
- Android中不同Activity之间的数据传递
- Android中Activity之间的数据传递和Intent使用
- Android中Activity之间的数据传递和Intent使用
- android中不同activity传递数据
- Android之activity中传递数据
- Android中Activity之间传递数据详解
- Android中传递数据(Activity、Fragment)
- 不同的Activity中传递数据
- onactivityresult在activity中数据的传递
- 渣渣的大数相比 - 我果然机智
- 读《大话设计模式》——适配器模式
- POJ 1942(组合数学)
- AccessibilityService之微信抢红包辅助功能实现
- 深度学习个人总结之四----自编码算法(AutoEncoder)
- Android 中activity中传递数据的方式
- C++复习(三)
- JVM结构概览与运行机制
- ZOJ-3872-Beauty of Array【数学】【12th浙江省赛】
- hdoj4944FSF’s game
- cloudsim 资料
- OC - @preperty的一些修饰词
- Shiro在strust2+spring中的应用
- iOS常见问题总结