上一篇中完成了如上图的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(); }

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

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

    首先是从数据库中获取所有的账户记录然后设置默认选中的用户账号代码如下: private void initUser(){//获取账号列表dbHelper=new DataHelper(this);us ...

  2. android开发我的新浪微博客户端-登录页面UI篇(4.1)

    首先回顾一下功能流程当用户开启软件显示载入页面时程序首先去sqlite库查询是否已经保存有用户的新浪微博的UserID号.Access Token.Access Secret的记录如果没有一条记录那么 ...

  3. android开发我的新浪微博客户端系列教程

    android开发我的新浪微博客户端-载入页面UI篇(1.1)http://www.1000phone.net/thread-7750-1-1.html android开发我的新浪微博客户端-载入页面 ...

  4. android开发我的新浪微博客户端-用户授权页面UI篇(3.1)

    看上面的图,其实这个页面的UI实现不复杂,首先是背景部分的实现这个参考 android开发我的新浪微博客户端-载入页面UI篇(1.1),重点来讲讲这个半透明的弹出对话框窗口是如何实现的,首先新建名为A ...

  5. android开发我的新浪微博客户端-用户授权页面功能篇(3.2)

      ==> 在上一篇实现了用户授权页面的UI,如上图,接下来要做的就是在这个基础上完成功能部分真正实现用户的授权认证,这一篇是android开发我的新浪微博客户端-OAuth篇(2.1)的具体应 ...

  6. android 除了webview 浏览器控件,android开发我的新浪微博客户端-OAuth认证过程中用WebView代替原来的系统自带浏览器...

    前面的文章的OAuth认证过程在获取oauth_verifier码是是通过调用android系统带的浏览器进行用户授权认证的, 具体见:android开发我的新浪微博客户端-用户授权页面功能篇(3.2 ...

  7. android实现新闻内容显示功能,Android开发实现自定义新闻加载页面功能实例

    本文实例讲述了Android开发实现自定义新闻加载页面功能.分享给大家供大家参考,具体如下: 一.概述: 1.效果演示: 2.说明:在新闻页面刚加载的时候,一般会出现五种状态 未知状态(STATE_U ...

  8. android开发我的新浪微博客户端-OAuth篇(2.1)

    本篇说说关于OAuth授权认证的事情,新浪开放api都必须在这个基础上才能调用,所以有必要专门来讲讲,前面的文章中已经提到过关于新浪微博提供了OAuth和Base OAuth两种认证方式,并且本项目采 ...

  9. iphone开发我的新浪微博客户端-用户登录准备篇(1.1)

    首先说一下我这个的实现思路,登录支持多个账号,也就是说可以保存多个微博账号登录的时候选择其中一个登录.多个账号信息保存在sqlite的数据库中, 每一个账号信息就是一条记录, 当用户启动微博客户端的时 ...

最新文章

  1. 【c语言】蓝桥杯算法训练 整除问题
  2. mysql recovery = 4_强制MySQL InnoDB恢复参数innodb_force_recovery
  3. Linux入门学习(八)
  4. 利用wxpython编写GUI
  5. datatable某一行第N列为空的时候删除某一行
  6. 威纶通触摸屏离线模拟正常,为什么下载到屏幕后部分按钮开关等不显示?
  7. 这 6 个爬虫开源项目 yyds
  8. ubuntu 下文件/文件夹 比较工具 DiffMerge
  9. 为什么你996猝死,你老板007都没事?
  10. Several ports (8005, 8080, 8009) required by demo are already in use. The server may already be runn
  11. 知乎创意总监、Dine 设计团队创始人 @disinfeqt :设计、音乐
  12. python中关于try,expect的用法
  13. 【OpenCV】ChArUco标定板角点的检测Detection of ChArUco Corners
  14. 一线城市房价的理性思考
  15. 牛客练习赛60 D斩杀线计算大师
  16. Spring官网下载SpringFramework
  17. 频谱仪的基本使用之RBW设置
  18. “四国军棋界面的EclipseRCP实现”开发进度(未完成)
  19. 考研不歧视双非的院校计算机专业,最全收集!40多所不歧视本科的考研院校!...
  20. 通过weui-1.1.3源码学习前端开发(三)从example看起-src/index.html文件

热门文章

  1. 用python客户画像代码_客户画像与标签体系-Python数据科学技术详解与商业项目实战精讲 - Python学习网...
  2. 学习API网关遇到的名词
  3. H5画布不显示图片的问题解决
  4. React 开始制作 6
  5. iOS开发业界毒瘤 Hook
  6. NPOI 导出Excel
  7. 突发!微信官方证实:“绞杀”了刷量平台
  8. HTC VIVE SDK 中的例子 hellovr_opengl 程序流程分析
  9. CCF201503-4 网络延时(100分)
  10. Linux磁盘阵列技术详解(二)--raid 1创建