技术标签: Android实现activity传值 Android
今天写这篇文章主要是因为自己这段时间在学习安卓的时候实现不同activity之间传值问题进行一个小小的总结。
举个简单例子,比如我要在做一个小项目要获取用户的个人信息,在登录的时候我们需要保存用户的信息,或者我们需要查看个人的信息,那实现这个小功能怎么办呢。我想你们肯恩会跟我一样那就是通过数据库查询如下
String sql = “select * from user where username=?”;(或者通过账号,邮箱来查询);
这里我们就用邮箱来查询吧
String sql = “select * from user where email=?”;
好了,写了这条语句我们的思路大体是正确的,但是我们需要明白的这个email怎么来获取。
【方案一】
如果我们有两个界面,一个是登录界面(LoginActivity)另外一个是显示个人信息的界面(showPersonInfoActivity)
我们登录进去后然后显示个人信息可以使用Intent或者Bundle来实现传值具体做法如下:
>使用Intent实现传值
//就用我们上述说的从LoginActivity传值到showPersonInfoActivity
//我们通过email来实现数据库查询条件,那么我们需要将登陆界面的email传过去
//email是你自己布局创建控件的id这里仅做参考
String login_email = email.getText().toString();
//传值
Intent intent = new Intent(LoginActivity.this, showPersonInfoActivity.class);
//这里我们将login_email存放到receive_eamil中
intent.putExtra("receive_email", login_email);
//向下传值
startActivity(intent);
接收上面传过来的值
//取值
Intent intent = getIntent();
//获取Intent中的数据
//intent.getIntExtra(key, value);//接收int类型的值
//这样我们就接收到了上面传过来的值
String login_email = intent.getStringExtra("receive_email");//接收String类型的值
>通过Bundle传值
使用Bundle传值其实跟上面方法差不多这里就简单写一下
//传值
Intent intent = new Intent(this, XXXActivity.class);
Bundle bundle = new Bundle();
bundle.putInt(key, value);
bundle.putString(value);
intent.putExtras(bundle);
startActivity(intent);
//取值
intent.getExtras();
bundle.getInt(key);
bundle.getString(key);
在这里我们可以看到我们实现了activity之间的传值,但是这只是针对于2个相邻activity之间的传值假设我需要从A->D,难道我们还要像上面的那种方法从A->B->C->D 这样看起来是行的通的但是这种方法的效率实在是低下,而且还很容易出错,举个例子
就用我上面讲的那个案例来说,假设我这里有三个页面,登录,主菜单界面,个人信息界面
首先我们登录进去是主菜单界面,通过侧滑菜单打开显示个人信息界面,那么我也需要实现查看个人信息的功能这下我们如果要用上面的方法来实现传值就会出现这样的一个问题
在登录界面我们获取email之后我们需要判断下用户输入的信息是否正确才能进入主菜单界面如果我们按照上面的逻辑来实现的话
首先我们会跳转到个人信息界面,而不是主菜单界面,为什么呢,原因很简单
因为我们传值不是有个startActivity(intent);这样导致我们下面的方法无法执行,所以这是一个弊端不可取。
好了说了上面的一些利与弊,下面来看看我是如何解决这个问题的。
【思路讲解】
对于解决上面的那个问题我们可以使用SharedPreferences来实现数据的存储以及读取
首先我们建一个通用类名字为Save如下
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by https://blog.csdn.net/wyf2017 on 2018/12/19.
*/
public class Save {
public static void saveUserInfo(Context context, String email) {
/**
* SharedPreferences将用户的数据存储到该包下的shared_prefs/config.xml文件中,
* 并且设置该文件的读取方式为私有,即只有该软件自身可以访问该文件
*/
SharedPreferences sPreferences = context.getSharedPreferences("config", context.MODE_PRIVATE);
SharedPreferences.Editor editor = sPreferences.edit();
//当然sharepreference会对一些特殊的字符进行转义,使得读取的时候更加准确
editor.putString("login_email", email);
//切记最后要使用commit方法将数据写入文件
editor.commit();
}
}
这里就新建了一个saveUserInfo方法原来保存用户的email这里大家可以修改下,然后我们接下来就是要去使用这个方法实现存储数据如下
//检验登录信息
public void isLogin() {
String activity_email = email.getText().toString();
String activity_password = password.getText().toString();
if (activity_email.isEmpty()) {
Toast.makeText(LoginActivity.this, "账号不能为空", Toast.LENGTH_SHORT).show();
return;
}
if (activity_password.isEmpty()) {
Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
UserService userService = new UserService(LoginActivity.this);
boolean flag = userService.login(activity_email, activity_password);
if (flag) {
showDailog();
//保存用户登录的邮箱
Save.saveUserInfo(LoginActivity.this,activity_email);
} else {
Toast.makeText(LoginActivity.this, "账号或者密码错误!", Toast.LENGTH_SHORT).show();
}
}
接下来就是我们需要去取值了
//取值
SharedPreferences sPreferences = getSharedPreferences("config", MODE_PRIVATE);
String email = sPreferences.getString("login_email", "");
【总结】
以上就是我个人自己在学习过程如何在不同的activity之间传值的总结,希望能帮助和我一样碰到相同问题的小伙伴,有什么疑问可以关注左上角我的公众号可以给我留言。
记录一下生成exe文件1.尽量将所有要执行的py文件放在一个大文件夹下(里面允许有多个文件夹)2.命令行输入pyi-makespec main.pymain.py为Python程序的入口py文件,根据自身项目情况修改3.现在文件夹下生成了一个main.spec文件和两个文件夹4.编辑main.spec文件找到a = Analysis([‘main.py’])这一句,把文件路径写入列表...
这里写目录标题一、分支结构与选择结构(1)单分支结构(2)二分支结构(3)紧凑形式代码演示:(4)多分支结构(5)pass语句二、循环结构1、for语句(1)计数遍历循环:(2)字符串遍历循环(3)列表遍历循环(4)文件遍历循环(5)for循环的扩展模式2、while语句(1)无限循环(2)while循环的扩展模式3、循环控制保留字(1)break语句(2)continue语句(3)比较补充:一、...
Windows C盘清理指北动机C盘空间不足和每个人小时候都会尿裤子是一个道理的尴尬但是却必须经历,,ԾㅂԾ,,但是现在我已经不再惧怕了,相信看完这篇文章你也是如此o( ̄▽ ̄)ブ合理分配本人平时是有合理管理软件分配的习惯,各种软件都是安装在C盘之外,与此同时能够设置缓存文件夹的都会手动设置好平时没有这种习惯的同学请先行检查软件安装和缓存...
申请开通小程序直播1、直播电商源码申请小程序直播有以下几个硬性指标:1. 满足小程序18个开放类目2. 主体下小程序近半年没有严重违规3. 小程序近90天内有过支付行为4. 主体下公众号累计粉丝数大于100人5. 主体下小程序连续7日日活跃用户数大于100人6. 主体在微信生态内近一年广告投放实际消费金额大于1万元注:条件1、2、3为必须满足,4、5、6为满足其中一项即可2、登录微信公众平台,提交申请开通直播电商源码左侧菜单栏找到直播,即可申请。小程序接入直播组件
本文使用的交叉编译器arm-himix200-linux交叉编译qt的依赖库交叉编译util-linuxhttps://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.33/util-linux-2.33.2.tar.gz./configure --prefix=/opt/hisi-linux/x86-arm/lib/util-...
电脑硬盘分区、移动硬盘、U盘等在使用过程中有时会出现错误,使分区打不开无法读取分区中的数据,并且提示“文件名目录名或卷标语法不正确”。文件名目录名或卷标语法不正确怎么修复?文件名目录名或卷标语法不正确怎么修复?工具/软件:光明数据恢复软件步骤1:先下载并解压软件打开后,选中需要恢复的盘,然后点《开始恢复》按钮文件名目录名或卷标语法不正确怎么修复?步骤2:软件扫描到资料后,会放到与要恢复盘卷标名相同的目录中文件名目录名或卷标语法不正确怎么修复?步骤3:扫...
这是第一次写博客,也不知道从何写起,嗯...那就讲讲最近调试的一个GSM模块这个模块接出了RS232电平接口和TTL电平接口,方便调试,RS232可以直接通过USB转口线和电脑相连进行调试模块默认是9600波特率,电脑调试只需要串口调试助手,相信大家都会用,调试使用AT指令进行控制GSM模块,具体详细的电脑调试在此不详细介绍了,有兴趣的可以网上找找,资料一大堆,也可以留言问我。大家肯定对程
本次装置主要是对输入的正弦信号进行频率变换,并将原输入正弦信号作为 X 轴信号、变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。采用 EK-TM4C123GXL 板卡作为主控;频率变换采用“锁向环+计数器”实现 1-5 倍频的频率变换控制;李萨如图形采用两个 AD通道采集原输入的正弦信号作为 X 轴信号和频率变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。
1、打开Run/Debug Configuration,选择你的tomcat2、然后在 Server > VM options 设置为 -Dfile.encoding=UTF-8转载于:https://www.cnblogs.com/kingsonfu/p/11010539.html
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321一。朋友面的一家公司1.说下let,var,const。      var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。      let定义的
一、标准容器3、关联容器主要分为两类:set:集合,存的是关键字keymap:映射表存的是 [key,value]键值对常用增删查方法:增加:insert(val);遍历:iterator自己搜索或调用find成员方法,unordered_set<int>::iterator it = set1.find(15); cout << *it;删除:erase(key) erase(it)3.1、无序关联容器 => 链式哈希表无序关联容
TDDL大家应该很熟悉了,淘宝分布式数据层。很好的为我们实现了分库分表、Master/Salve、动态数据源配置等功能。那么分布式之后,数据库自增序列肯定用不了了,如何方便快捷的解决这个问题呢?TDDL也提供了SEQUENCE的解决方案。下面就来简单剖析一下实现原理。。。。。。第一步:创建一张sequence对应的表。CREATE TABLE `imp_sequence` ( `BIZ_NAME