Android开发人员都知道,Intent适用于在不同的Activity之间传递数据,包括参数、字符串、以及序列化的对象等。 但是笔者所做的项目用到了使用Intent 传递Bitmap图片对象,图片的数据量相对来说是比较大的,那么intent能否胜任传递图片的任务呢? 在Activity或者组件之前传递信息时,一般采用intent绑定bundle的方式传值,但在使用过程中需要注意的是不要用bundle传递大容量数据: 传输一般的数据参数不会用到这么大的数据量,因此 如果想传递图片那么建议使用其他方式,附录里提供了三种传递图片的方式。 下面谈谈我们如何通过Intent组件传递大数据 传递小的bitmap对象 1。 Bitmap作为参数 而对于比较大的数据传递(笔者实验最好不要超过1M),解决的方法如下: 方法一:将需要传递的数据写在临时文件或者数据库中,再跳转到另外一个组件的时候再去读取这些数据信息,这种处理方式会由于读写文件较为耗时导致程序运行效率较低
在Android开发中,经常要在Activity之间传递数据。前面也学习了Activity和Intent相关基础,接下来一起来学习Activity的数据传递。 一、简介 通过前面的学习知道,Intent可以用来开启Activity,同样它也可以用来在Activity之间传递数据。Intent提供了多个重载的方法来携带额外的数据,如下所示。 其实用Intent传递数据以及对象时,它的内部也是调用了Bundle对象相应的put()方法,也就是说Intent内部也是用Bundle来实现数据传递的,只是封装了一层而已。 ,并且将Intent作为载体进行数据传递。 从上图中可以看出,MainActivity中输入的数据username成功地传递给SecondActivity,这就是使用Intent进行不同界面传递数据的用法。
代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!
零、前言 打开FromActivity,通过按钮以返回结果方式打开ToActivity,同时在intent中加入数据,在ToActivity的onCreate方法中使用数据填充到TextView上。 按返回按钮,将ToActivity数据传递给FromActivity,在onActivityResult方法中验证返回结果并将数据填充到TextView上。 ? Activity数据传递.gif 一、Java类 FromActivity.java public class FromActivity extends AppCompatActivity { Person("捷特", 24); Intent intent = new Intent(); intent.putExtra("data", "我是ToActivity的数据 Activity传递数据.png ---- 附录 Person.java public class Person implements Serializable { private String
这样的场景在实际开发中还是很常见的,比如说A activity中做了一个查询的功能,查询向后台请求数据假设需要传入一个时间字段,不传的话默认是当前时间,B activity中可以设置时间,那我们就可以在根据 另外需要提到的是,上面都是传一些系统自带的数据类型,如果想传一个对象或者对象的数组怎么办呢? 还是可以用Intent传值,不过要对传递的对象作一些特殊处理,可以参考这篇博客: intent可以传递的数据类型 三、先把数据存在本地,然后在下一个Activity中从本地取。 这里推荐一篇博客,可以大概了解下Android的几种数据存储方式 四、使用EventBus框架 越来越多的项目开发中使用到EventBus这个框架,那什么是EventBus呢? 开发中我们都知道,很多时候要在Activty与Activty间,Activty与Fragment等之间传递数据进行交互,操作起来很不方便,我们以前可能会用到接口回调,或是用观察者模式来实现,或是发广播等等
零、前言 [1].Activity向Fragment传数据 [2].Fragment向Activity传数据 [3].Fragment向Fragment传数据 一、Activity向Fragment 传数据效果: ? Activity向Fragment传数据.png ---- ---- 二、Fragment向Activity传数据效果: ? ft.add(R.id.fl_fragmemt_send, new SendFragment()); ft.commit();//4.提交事务 } /** * 设置数据方法 Fragment向Activity传数据.png ---- ---- 三、Fragment向Fragment传数据据效果: ?
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递。 一、常用数据类型 在前面几节我们只学习了一些常用类型的数据传递,主要是以下这些重载方法: putExtra(String name, boolean value) putExtra(String Integer、String、CharSequence三种类型的列表数据,如果需要传递到额数据是这几种类型,或能够转换为这几种类型,那么数据的传递也变得很顺利了。 这里简单使用一个示例来学习,这里简化为全局保存一个状态值,可以方便在各Activity中进行传递。 ... // 读取数据 int state = app.getState(); ... }} 这样就非常方便的在各Activity之间进行数据传递了
发送 intent.setClass(Bmi.this, Report.class); Bundle bundle = new Bundle(); bundle...
接下来是借助Intent来进行Activity之间的数据传递,要借助Intent对象来进行Activity 之间的数据传递,要借助Intent类的putExtra方法: ? ,在第二个方法sendImageData方法中我们使用bundle.putParcelable方法来储存一个Bitmap对象,在上面提过了我们可以用Serializable接口来将我们要传递的自定义数据 Ok,完成了,把传送的book类的对象的信息显示了出来。 那么对于Activity之间传送的数据有没有大小限制呢? 单击“传送大数据”按钮,并不会启动SecondActivity,我们打开LogCat: ? !!! 这就证明0.5Mb是极限的传输大小,Activity之间可以通过Intent每次传输小于0.5Mb的数据。 如果博客中有什么不正确的地方,还请多多指点。 谢谢观看。。。
上下文,类字节码 调用Intent对象的putExtra(key,val)方法,传递数据,参数:键值对 调用startActivity(intent)方法,开启 第二个界面里面: 获取Intent对象, 调用getIntent()方法,获取到传递过来的Intent对象 调用Intent对象的getStringExtra(name)方法,获取传递的String,参数:键 获取Random对象,new出来随机数对象 调用Random对象的nextInt(n),获取随机值,参数:int类型的最大值,0开始要减一 显示进度条,布局文件增加<ProgressBar/>,设置最大值android:max=”100”,代码中获取到这个 ProgressBar对象,调用对象的setProgress(p)方法,参数:上面的随机值 也可以传递对象,但是这个对象必须序列化 第一个activity: package com.tsh.testrp super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); //获取展示数据
1、向目标Activity【Main2Activity】传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 int型的请求码标识当前Activity startActivityForResult(intent,1); 2、在目标Activity【Main2Activity】中回传数据 //回传数据用得Intent ("age",18); //设置结果码标识当前Activity,回传数据。 setResult(1,intent); 回传时会把请求码、结果码、Intent数据封装为一个整体回传,请求码+结果码唯一标识回传的Intent 3、在上一级Activity中取出回传的数据 上一级 开启了多个目标Activity,回传数据时都是回调onActivityResult()方法,所以常常要根据结果码区分是哪个目标Activity回传的数据。
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递方法。 1、通过 Intent 传递 我们在进行 Activity 跳转时,是要有 Intent,此时 Intent 是可以携带数据的,我们可以利用它将数据传递给其它Activity。 2、通过全局变量传递 顾名思义,就是借助一个全局变量做中转,去传递数据。还是以前面的两个 Activity 为例,传递不支持序列化的 Student 对象。 的设置信息,我们也可以用它来实现 Activity 间的数据传递。 这里我们就不关注用什么手段去访问它了,我们重点还是在利用它进行 Activity 之间的数据传递。
Android 中Activity 之间传递参数 1.传递简单数据 在A Activity中 findViewById(R.id.startBActicityBtn).setOnClickListener onClick(View v) { Intent i = new Intent(MainActivity.this,TheActivity.class); // 对基础的数据类型进行传递 findViewById(R.id.TheTextView); Intent i = getIntent(); tv.setText(i.getStringExtra("data")); 这种传值就是传递基本的数据类型 2.传递数据 包Bundle 在A Activity中 findViewById(R.id.startBActicityBtn).setOnClickListener(new View.OnClickListener iOS中传递字典数据类型过来 。
上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity。 setResult()方法也接收两个参数,第一个参数resultCode结果码,第二个参数则是把带有数据的Intent传递回去。 第一个参数requestCode表示在启动Activity时传递的请求码;第二个参数resultCode表示在返回数据时传入结果码;第三个参数data表示携带返回数据的Intent。 二、示例 接下来通过一个示例来学习Activity如何通过Bundle回传数据。 本节和上一节分别学习了简单数据在Activity之间的传递,下期一起来学习复杂数据的传递。
启动一个Activity: 在用startActivityForResult()来启动一个Activity时,Intent的写法与startActivity()是一样的,没有任何区别,只是你需要传递一个额外的 Integer的变量作为启动参数,当启动的那个Activity退出时这个参数会被作为回调函数的一个参数,用来区分返回结果,也就是说你启动Activity时传递的参数(requestCode)和返回结果时的那个参数 ()方法,这个方法有三个参数: resquestCode : 启动Activity时传递的requestCode; resultCode: 表示调用成功或者失败的变量,值为下面二者之一; /** Standard 比如:联系人应用是返回的联系人URI,相机返回的是Bitmap数据。 进行信息传递和沟通的讲解,到此Intent系列文章完结,前两篇文章是关于Intent详解和Intent使用的文章,有什么不明白的请留言,大家共同学习,共同进步,谢谢!
1、第一种方式,也是最常用的方式,就是使用Bundle来传递参数 MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle 中的onCreatView方法中,通过getArgments()方法,获取到bundle对象,然后通过getString的key值拿到我们传递过来的值。 2、第二种方式,是在宿主Activity中定义方法,将要传递的值传递到Fragment中,在Fragment中的onAttach方法中,获取到这个值。 ) activity).getTitles(); } //通过强转成宿主activity,就可以获取到传递过来的数据 3、下面在扩展一下创建Fragment和传递数值 如果我们不需要传递数值,那就直接可以在宿主 activity中,跟平常一样创建fragment,但是如果我们需要传递数据的话,可以使用newInstance(数据)方法来传递,这个方法是自己定义的,但是是定义在Fragment中的一个静态方法。
1、知识点:启动activity、注册activity、button绑定监听事件、传递参数、获取参数 2、传递参数以及绑定监听代码(注意如果绑定监听出现错误:需要导入import android.view.View.OnClickListener new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //实现activity 的跳转 Intent intent = new Intent(MainActivity.this,NewActivity.class); //传递数据 //准备数据 intent.putExtra(“name ”, “这是主要传递的内容”); //跳转 startActivity(intent); 3、接收activity获取参数 String val = getIntent().getStringExtra (“name”); 4、注册activity <activity android:name=”NewActivity”></activity>
Intent传递数据和Bundle传递数据是一回事, Intent传递时内部还是调用了Bundle。
这个intent现在为止就是在启动一个活动 现在看来有点屈才啊,,,其实还能传递数据。 怎么去传递-*- intent里面有很多的putexra的重载方法,里面有两个参数 一个参数是键,从后面的活动里面取值,第二个参数是才是要传递的数据 ? 这是要写的代码 ? 首先通过getIntent()得到SecondActivity的启动信息 然后调用getstringextra()的方法老获取传递的数据 由于数据是整形数据,所以用getIntExtra()函数 布尔的话就是 可以从日志里面看见出传递的值,这样就成功。、 也可以返回数据给上一个活动哦。 接下来写这个。-
Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat报错等等。 这就牵涉到一个问题:Intent 传递数据大小限制。 Intent携带信息的大小受Binder限制 Intent携带信息的大小其实是受Binder限制。本文标题也可以改为“Binder传递数据大小限制”。 数据以Parcel对象的形式存放在Binder传递缓存中。 如果数据或返回值比传递buffer大,则此次传递调用失败并抛出TransactionTooLargeException异常。 多个地方在进行传输时,即时它们各自传输的数据不超出大小限制,TransactionTooLargeException异常也可能会被抛出。 在使用Intent传递数据时,1Mb并不是安全上限。 为什么Binder要限制传输数据的大小 个人推测,作为一种IPC的方式,Binder并不是为传输大量数据而设计。 传输大量数据,可以考虑URL之类的方法。
Activity间传递数据 Activity之间传递数据有两种方法: startActivity(intent):打开另一个Activity,同时向开启的界面Activity传递数据。 startActivityForResult(intent):打开另一个Activit,同时向开启的Activity传递数据,并回传数据。 Activity之间也可以传递对象,传递的对象需要进行序列化。 之间传递数据写了一个小的demo。 间传递数据用到了Intent的putExtra方法,并用startActivity实现跳转,最后利用finish将该界面关闭。
腾讯大数据处理套件(TBDS)是基于腾讯多年海量数据处理经验,对外提供的可靠、安全、易用的大数据处理平台。你可以根据不同数据处理需求选择合适的大数据分析引擎和相应的实时数据开发、离线数据开发以及算法开发服务,来构建您的大数据应用服务……
扫码关注云+社区
领取腾讯云代金券