当前位置: 首页 > 编程日记 > 正文

android开发我的新浪微博客户端-登录页面功能篇(4.2)

上一篇中完成了如上图的UI部分的实现,现在继续来讲功能的实现,用户登录操作主要就是账号列表显示和选择账号登录两个功能其他的都是些简单的辅助功能,首先是点击id为iconSelectBtn的ImageButton时显示用户选择窗口,这个时候去数据库中获取账号记录然后在选择窗口中以列表方式显示出来,通过上一篇已经知道Id为list的ListView控件来显示账号列表,首先是从数据库中获取所有的账户记录然后设置默认选中的用户账号代码如下:

private void initUser(){ //获取账号列表 dbHelper=new DataHelper(this); userList = dbHelper.GetUserList(false); if(userList.isEmpty()) { Intent intent = new Intent(); intent.setClass(LoginActivity.this, AuthorizeActivity.class); startActivity(intent); } else { SharedPreferences preferences = getSharedPreferences(Select_Name, Activity.MODE_PRIVATE); String str= preferences.getString("name", ""); UserInfo user=null; if(str!="") { user=GetUserByName(str); } if(user==null) { user=userList.get(0); } icon.setImageDrawable(user.getUserIcon()); iconSelect.setText(user.getUserName()); } }

这个initUser() 初始账号的方法在LoginActivity的onCreate中调用,主要完成两件事情,第一件获取通过userList = dbHelper.GetUserList(false);获取所有的账户记录,关于DataHelper前面已经有说过了,如果获取的用户记录为空那么就跳转到用户授权功能页面让用户添加账号,如果不为空那么通过SharedPreferences去读取用户上一次选择的账号名称,如果没有或者数据库里账号记录不包括这个账户名称那么默认显示记录的第一个账号和头像,如果有那么显示这个账户的名称和头像。关于SharedPreferences,是android提供给开发者用来存储一些简单的数据用的,非常方便类似于网站的Cookie,在这里我就是用这个来保存上一次用户选择的是哪个账号,非常实用。

     接下类首先为Id为list的ListView控件准备数据Adapter,这个Adapter非常简单就是普通的adapter继承BaseAdapter即可,代码如下:

public class UserAdapater extends BaseAdapter{ @Override public int getCount() { return userList.size(); } @Override public Object getItem(int position) { return userList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_user, null); ImageView iv = (ImageView) convertView.findViewById(R.id.iconImg); TextView tv = (TextView) convertView.findViewById(R.id.showName); UserInfo user = userList.get(position); try { //设置图片显示 iv.setImageDrawable(user.getUserIcon()); //设置信息 tv.setText(user.getUserName()); } catch (Exception e) { e.printStackTrace(); } return convertView; }
接下就是为这个ListView设定数据源Adapter,在账号选择窗口显示的时候进行设置,添加到id为iconSelectBtn的ImageButton的OnClickListener中代码如下

ImageButton iconSelectBtn=(ImageButton)findViewById(R.id.iconSelectBtn); iconSelectBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { ...... dialog.show(); UserAdapater adapater = new UserAdapater(); ListView listview=(ListView)diaView.findViewById(R.id.list); listview.setVerticalScrollBarEnabled(false);// ListView去掉下拉条 listview.setAdapter(adapater); listview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View view,int arg2, long arg3) { TextView tv=(TextView)view.findViewById(R.id.showName); iconSelect.setText(tv.getText()); ImageView iv=(ImageView)view.findViewById(R.id.iconImg); icon.setImageDrawable(iv.getDrawable()); dialog.dismiss(); } }); } });
通过上面代码完成了账号选择的功能,接下来给id为login的ImageButton添加OnClickListener,使得点击后以当前选择账号进入微博首页,代码如下:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); ...... ImageButton login=(ImageButton)findViewById(R.id.login); login.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { GoHome(); } }); } //进入用户首页 private void GoHome(){ if(userList!=null) { String name=iconSelect.getText().toString(); UserInfo u=GetUserByName(name); if(u!=null) { ConfigHelper.nowUser=u;//获取当前选择的用户并且保存 } } if(ConfigHelper.nowUser!=null) { //进入用户首页 Intent intent = new Intent(); intent.setClass(LoginActivity.this, HomeActivity.class); startActivity(intent); } }

在上面的GoHome方法中ConfigHelper.nowUser是类型为UserInfo的static类型用来保存当前登录账号的信息,替代web中session使用。

最后添加如下方法,用来当这个登录LoginActivity结束的时候保存当前选择的账户名称到SharedPreferences中,以便帮用户记住登录账号的功能,就是前面的initUser() 初始账号的方法中会获取保存在SharedPreferences中的账户名称,代码如下:

@Override protected void onStop() { //获得SharedPreferences对象 SharedPreferences MyPreferences = getSharedPreferences(Select_Name, Activity.MODE_PRIVATE); //获得SharedPreferences.Editor对象 SharedPreferences.Editor editor = MyPreferences.edit(); //保存组件中的值 editor.putString("name", iconSelect.getText().toString()); editor.commit(); super.onStop(); }

相关文章:

大脚本运行常见问题总结

1. Allowed memory size of 8388608 bytes exhausted 出现原因&#xff1a;脚本运行超过最大运行时间 解决方法&#xff1a;1 ) 修改 php.ini 文件。将memory_limit 由默认值改成合适的大小&#xff0c;重启服务器。 2&#xff09;在脚本中加入 ini_set("memory_limit&qu…

MQTT Qos类型解释

MQTT Qos类型解释 原文连接: https://blog.csdn.net/yangguosb/article/details/78653228 内容&#xff1a; Qos0 发送者只发送一次消息&#xff0c;不进行重试&#xff0c;Broker不会返回确认消息。在Qos0情况下&#xff0c;Broker可能没有接受到消息&#xff0c;流程如…

对做技术的一点思考

做技术在中国有没有前途&#xff1f;这个问题是每个在国内做技术的人都会思考的问题。在我看来&#xff0c;我们之所以会产生样的困扰&#xff0c;主要原因在于我们所谓的研发都是二次开发&#xff0c;国内任何公司&#xff0c;研究单位&#xff08;除开严格保密的单位&#xf…

iis伪静态排除css_魔众系统伪静态规则怎么配

魔众系列系统目前已经有大量用户在使用&#xff0c;大家对于伪静态的配置一直有所疑惑&#xff0c;经过和技术小哥哥的协商&#xff0c;我们特意将三种不同的 HTTP 服务器配置文件分享给大家&#xff0c;方便大家参考。魔众系列系统目前已经有大量用户在使用&#xff0c;大家对…

R.drawable 转 bitmap

引用&#xff1a;http://zhidao.baidu.com/question/291703800.html Bitmap bmpBitmapFactory.decodeResource(r, R.drawable.icon); Bitmap newb Bitmap.createBitmap( 300, 300, Config.ARGB_8888 ); Canvas canvasTemp new Canvas( newb ); canvasTemp.drawBitmap(bmp, …

洛谷P3254 圆桌问题(最大流)

题意 $m$个不同单位代表参加会议&#xff0c;第$i$个单位有$r_i$个人 $n$张餐桌&#xff0c;第$i$张可容纳$c_i$个代表就餐 同一个单位的代表需要在不同的餐桌就餐 问是否可行&#xff0c;要求输出方案 Sol 比较zz的最大流 从$S$向$1-m$连流量为$r_i$的边 从$m 1$向$m n$连流…

设置commit 提交模板

设置commit 提交模板 建议提交 &#xff08;.template&#xff09;模板文件 放在用户目录(Doceuments)下 (~/Doceuments) 原文连接: https://blog.csdn.net/mafei852213034/article/details/51908049 内容&#xff1a; 1、在根目录建立模板文件 如 xxx_template文件&#…

listen函数的第二个参数_【图像处理】OpenCV系列十七 --- 几何图像变换函数详解(一)...

上一篇我们学习了仿射变换的warpAffine函数&#xff0c;知道了如何用这个函数对图像进行旋转、平移等操作&#xff0c;那么本节我们一起来学习一下与仿射变换相关的其他函数以及相关的几何图像变换。一、convertMaps()函数1、函数原型void convertMaps(InputArray map1, InputA…

flex java socket通信

引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢&#xff1f;还是需要我们不断的学习&#xff0c;在学习的过程中会遇到不少的问题。下面我们就从源代码中找到有关的问题解决方案。希望大家在以后的Javasocket通信使用中有所收…

编程珠玑:对DAO层的一点修改

由于以前的Domain对象都是不需要序列化的&#xff0c;所以为了操作数据库查询的方便&#xff0c;直接采用继承BaseDomain的方式来完成。这样在传递动态参数的时候&#xff0c;只需要把参数放到Map总&#xff0c;就可以很好的在ibatis配置文件(map.xx来直接获取值)中使用。 这样…

solr 下载 有dist目录的(6需要8)

http://archive.apache.org/dist/lucene/solr/ solr6 需要java8 转载于:https://www.cnblogs.com/hnqm/p/9367140.html

抛出一个nullpointerexception_Java 14 发布了,再也不怕 NullPointerException 了!

推荐阅读&#xff1a;Java程序员danni&#xff1a;就一个HashMap&#xff0c;居然能跟面试官扯上半个小时&#xff1f;​zhuanlan.zhihu.com2020年3月17日发布&#xff0c;Java正式发布了JDK 14 &#xff0c;目前已经可以开放下载。在JDK 14中&#xff0c;共有16个新特性&#…

linux平台软件动态分析工具valgrind系列工具及其可视化

linux平台软件动态分析工具valgrind系列工具 Memcheck–内存检查工具Callgrind–函数调用分析工具Cachegrind–缓存命中分析工具Helgrind–线程分析工具Massif–内存堆栈分析工具 一、Valgrind 概述 Valgrind是一套Linux下&#xff0c;开放源代码&#xff08;GPL V2&#xf…

codeviz安装使用全记录

安装过程 $ sudo apt-get install -y graphviz graphviz-dev graphviz-doc $ sudo apt-get install -y libgv-* $ sudo apt-get install -y ncftp $ sudo ln -sf /usr/include/asm-generic/ /usr/include/asm http://www.csn.ul.ie/~mel/projects/codeviz/ $ wget http://www.c…

运维工程师的职责和前景

转载自网络 运维中关键技术点解剖&#xff1a;1 大量高并发网站的设计方案 &#xff1b;2 高可靠、高可伸缩性网络架构设计&#xff1b;3 网站安全问题&#xff0c;如何避免被黑&#xff1f;4 南北互联问题,动态CDN解决方案&#xff1b;5 海量数据存储架构 一、什么是大型网站运…

java visualvm远程监控_深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战

本文转自互联网&#xff0c;侵删本系列文章将整理到我在GitHub上的《Java面试指南》仓库&#xff0c;更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客&#xff1a;http://www.how2playlife.com本文是微信…

WCF入门(一)——简单的示例

这篇随笔写了一段时间了&#xff0c;当时没有发布&#xff0c;今天整理文档的时候发现了&#xff0c;顺便给配了些图。主要是绍了一下WCF编程模型&#xff0c;并给了一个简单的示例。 概述 WCF框架是下一代.NET平台通信应用程序的核心。它包含了Web服务、Remoting、同步和异步…

Callgrind--函数调用分析工具以及可视化方法

生成分析文件 命令行运行: valgrind --toolcallgrind ./palmGateMachine 检测完毕之后会生成一个文件callgrind.out.26805&#xff0c; 后面的数字其实是这个待测进程的pid 可视化方法 可视化方法 可视化工具 kcachegrind 1、下载地址: https://launchpad.net/ubuntu/trust…

Java中BASE64 编码

2019独角兽企业重金招聘Python工程师标准>>> BASE64 编码是一种常用的字符编码&#xff0c;在很多地方都会用到。JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder&#xff0c;用它们可以非常方便的完成基于 BASE64 的编码和解码。下面是本人编的两个小的函数…

java script (二)

实现轮播图 获取元素 document.getElementById("id名称") 事件&#xff08;onlond&#xff09; onlond "changeImg()" 在<script>中function changeImg(){ document.getElementById("img").src "图片地址"} 定时操作&…

转 [JAVA] 使用 common-fileupload 实现文件上传

就在前段时间&#xff0c;还在苦于找到不到合适的上传组件&#xff0c;虽然很早就知道了 common-fileupload&#xff0c;但当时却因为没有找到如何获取表单参数的方法而使用 jspSmartUpload&#xff0c;历尽艰辛终于找到了它的 jar&#xff0c;可是使用后才发现此东西对中文参数…

Cachegrind--缓存命中检查工具及其可视化

Cachegrind–缓存命中检查工具及其可视化 和 Callgrind–函数调用分析工具以及可视化方法 一模一样 命令改为: valgrind --toolcachegrind ./palmGateMachine 生成的文件名: cachegrind.out.8025 用kcachegrind 打开 参考我的另一篇文章&#xff1a; https://editor.csdn.…

java 快排_八大排序-快速排序(搞定面试之手写快排)

概要快速排序由C. A. R. Hoare在1960年提出&#xff0c;是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效&#xff0c;核心算法思想是分而治之。快速排序经常会被作为面试题进行考察&#xff0c;通常的考察思路是快排思想、编码实践之手写快排以及进一步…

maven命令简介

为什么80%的码农都做不了架构师&#xff1f;>>> 创建普通应用项目&#xff1a; mvn archetype:create -DgroupIdcom.byread -DartifactIdblog 创建WEB项目&#xff1a; mvn archetype:create -DgroupIdcom.byread -DartifactIdblogweb -DarchetypeArtifactIdmav…

分治策略解决幂乘问题

float fast_pow ( float x, float y ) {if ( y 1 )return x;else if ( (int)y % 2 0 )return fast_pow(x,y/2)*fast_pow(x,y/2);elsereturn fast_pow(x,(y-1)/2)*fast_pow(x,(y-1)/2)*x; } 转载于:https://www.cnblogs.com/Nicholastwo/p/9368076.html

用java实现一个计算器程序_1.2第一个java程序——hello world

第一个java程序——hello world实现一个java程序&#xff0c;主要有三个步骤&#xff1a;1、编写源代码&#xff0c;2、编译源代码&#xff0c;3、运行。java的源代码必须先编译&#xff0c;然后才能由JVM解析执行。所以我们程序员第一步的工作就是要编写java的源代码文件&…

linux valgrind Memcheck--内存检查工具

linux valgrind Memcheck–内存检查工具 使用方法: 注意&#xff0c;这里要用debug版本&#xff0c;如果是release的运行文件&#xff0c;则用debug编译出来的可执行文件替换 输出到终端: valgrind --toolmemcheck --leak-checkfull ./test.out输出到文件: valgrind --toolm…

Cassandra 1.2 发布,NoSQL 数据库

NoSQL 数据库 Cassandra 发布 1.2 正式版&#xff0c;该版本包含 CQL3&#xff0c;这是在 2012年4月发布的 1.1 版本中引入的。CQL 是一个 Cassandra 的建模和查询语言&#xff0c;类似关系数据库中的 SQL。CQL3 支持多列主键和很多其他的改进。 Another Cassandra 1.2 主要的增…

CQRS实践(3): Command执行结果的返回

上篇随笔讨论了CQRS中Command的一种基本实现。 面对UI中的各种命令&#xff0c;Controller会创建相应的Command对象&#xff0c;然后将其交给CommandBus&#xff0c;由CommandBus统一派发到相应的CommandExecutor中去执行&#xff0c;我们的ICommandBus的接口声明如下: public …

iOS学习——核心动画之Layer基础

iOS学习——核心动画之Layer基础 1、CALayer是什么&#xff1f; CALayer我们又称它叫做层。在每个UIView内部都有一个layer这样一个属性&#xff0c;UIView之所以能够显示&#xff0c;就是因为它里面有这个layer才具有显示的功能。我们可以通过操作CALayer对象&#xff0c;可以…