Android实现登录功能demo示例
本文实例讲述了android实现登录功能的方法。分享给大家供大家参考,具体如下:
安卓,在小编实习之前的那段岁月里面,小编都没有玩儿过,如果说玩儿过,那就是安卓手机了,咳咳,敲登录的时候有种特别久违的熟悉,这种熟悉的感觉就和当时敲机房收费系统一样,那叫一个艰难啊,不过小编相信,在小编的it成长之路上,正是因为有了这些艰难险阻陪伴着小编一起成长,才让小编更加勇敢坚强,勇敢的面对一个又一个bug,坚强的敲完一行行代码,经过了几天的研究登录一条线的功能已经实现,现在小编就来简单的总结一下,还请小伙伴们多多指教哦`(*∩_∩*)′!
总的来说android的架构和我们之前学习过的三层架构还是很相似的,因为知识都是相通的嘛,嘿嘿,这样入手起来多了几分熟悉感,小编敲登录的思路是这样的,首先,在model里面建立实体,接着在res中的layout里面建立一个xml文件,对所需要的页面进行相关布局,至此,小编对摆控件还没有多大的感觉,还需要多多练习,最后在src中ui里面建立一个类写具体的逻辑。在敲登录的时候小编在网上下载了很多demo,但是她们的架构和小编现在所敲项目的架构不是很相似,所以就摸着石头过河,一路走来,小编摔得鼻青脸肿,但是过程很美丽`(*∩_∩*)′,接下来,我们来看具体的代码实现。
首先,我们需要在model里面建立实体,由于小编用到了两张表,所以需要建立两个model,第一个用到的是loginmsg,代码如下:
/*** * 说明:登录时所需要的相关信息 * 作者:丁国华 * 时间:2015年7月17日 09:40:18 */ package jczb.shoping.model; import java.io.serializable; import android.r.string; //登录所需要的字段信息 public class loginmsg implements serializable { private string avatarpath; private string accountnum; private string littlename; private string memberrank; private int growths; private string memberintegral; public string getavatarpath() { return avatarpath; } public void setavatarpath(string avatarpath) { this.avatarpath = avatarpath; } public string getaccountnum() { return accountnum; } public void setaccountnum(string accountnum) { this.accountnum = accountnum; } public string getlittlename() { return littlename; } public void setlittlename(string littlename) { this.littlename = littlename; } public string getmemberrank() { return memberrank; } public void setmemberrank(string memberrank) { this.memberrank = memberrank; } public int getgrowths() { return growths; } public void setgrowths(int growths) { this.growths = growths; } public string getmemberintegral() { return memberintegral; } public void setmemberintegral(string memberintegral) { this.memberintegral = memberintegral; } }
第二个用到的foundpassword,具体代码如下所示:
/*** * 说明:找回密码的相关信息 * 作者:丁国华 * 时间:2015年7月17日 09:41:18 */ package jczb.shoping.model; import java.io.serializable; import android.r.string; public class foundpassword implements serializable { private string phonenumber; //手机号 private string vlidationnum; //验证码 private string password; //密码 private string repetypassword; //确认密码 public string getphonenumber() { return phonenumber; } public void setphonenumber(string phonenumber) { this.phonenumber = phonenumber; } public string getvlidationnum() { return vlidationnum; } public void setvlidationnum(string vlidationnum) { this.vlidationnum = vlidationnum; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } public string getrepetypassword() { return repetypassword; } public void setrepetypassword(string repetypassword) { this.repetypassword = repetypassword; } }
接着,我们来画页面,用xml对我们的登录页面进行相关布局设置,具体代码如下所示:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/login_background_color"> <!-- 学乐购的布局 --> <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="30dp" android:gravity="center" android:text="学乐购" android:textcolor="@color/blue_ipsetting" android:textsize="30sp" android:textstyle="bold" /> <!-- 整个linearlayout是账号和请输入账号的矩形框架 --> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:orientation="horizontal" android:padding="10sp" android:background="@color/white" > <!-- 帐号的布局 --> <textview android:id="@+id/tv_loginaccount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/loginaccount" android:textcolor="@android:color/black" android:textsize="18.0sp" /> <!-- edittext表示的是请输入帐号的一个布局 --> <edittext android:id="@+id/loginaccount_id" android:layout_width="160dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@null" android:ems="10" android:hint="@string/inputaccount" android:padding="5.0dip" android:paddingright="40dp" android:textcolor="#ff3b3b3b" android:textsize="16.0sp" > </edittext> </linearlayout> <!-- 密码和请输入密码的整个布局 --> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:orientation="horizontal" android:padding="10sp" android:background="@color/white"> <!-- 密码的布局 --> <textview android:id="@+id/tv_password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/password" android:textcolor="@android:color/black" android:textsize="18.0sp"/> <!-- 请输入密码的布局 --> <edittext android:id="@+id/password_id" android:layout_width="163dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@null" android:ems="10" android:hint="@string/inputpassword" android:inputtype="textpassword" android:padding="5.0dip" android:paddingright="30dp" android:textcolor="#ff3b3b3b" android:textsize="16.0sp"/> </linearlayout> <button android:id="@+id/login" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginbottom="14dp" android:layout_marginleft="15dp" android:layout_marginright="15dp" android:layout_margintop="80dp" android:background="@drawable/android_title_bg" android:gravity="center" android:text="@string/login" android:textcolor="#fff" /> <!-- 找回密码和理解注册的布局 --> <!-- 找回密码和立即注册的布局 --> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@color/white" android:orientation="horizontal" android:padding="10sp" > <!-- 找回密码 --> <textview android:layout_width="70dp" android:layout_height="50dp" android:layout_marginleft="40dp" android:layout_margintop="15dp" android:text="找回密码" android:textsize="15sp" android:textstyle="bold" /> <!-- 立即注册 --> <textview android:layout_width="70dp" android:layout_height="56dp" android:layout_marginleft="55dp" android:layout_margintop="15dp" android:layout_weight="0.03" android:text="立即注册" android:textsize="15sp" android:textstyle="bold" /> </linearlayout> </linearlayout>
最后,来看一下具体的逻辑部分的代码,具体代码如下所示:
package jczb.shoping.ui; import java.security.publickey; import java.util.hashmap; import java.util.list; import java.util.map; import com.alibaba.fastjson.json; import jczb.shoping.common.agentapi; import jczb.shoping.model.foundpassword; import jczb.shoping.model.loginmsg; import android.r.integer; import android.r.string; import android.accounts.account; import android.app.activity; import android.content.intent; import android.os.bundle; import android.os.handler; import android.os.message; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast; public class loginactivity extends activity implements onclicklistener { //声明变量 private handler mhandler; edittext account; edittext password; private button loginbutton ; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_login); account =(edittext) findviewbyid(r.id.loginaccount_id); password=(edittext) findviewbyid(r.id.password_id); loginbutton=(button) findviewbyid(r.id.login); // 对登录按钮设置监听,方法由下面的onclick实现 loginbutton.setonclicklistener(this); } @override /** * 实现登录按钮的跳转 */ public void onclick(view v) { // 根据id判断单击的是哪个控件,固定写法 switch (v.getid()) { case r.id.login: login(); break; default: break; } } /** * 登录方法 */ public boolean login() { if (isusernameandpwdvalid()) { mhandler=new handler(){ public void handlemessage(message msg){ switch(msg.what){ case -1: toast.maketext(loginactivity.this,"服务器连接失败!", toast.length_short).show(); break; case -2: toast.maketext(loginactivity.this,"哎呀,出错啦...", toast.length_short).show(); break; case 1: string temp=(string)msg.obj; //将拿到的json转换成数组 list<loginmsg> loginmsginfo=json.parsearray(temp, loginmsg.class); list<foundpassword> foundpasswordinfo=json.parsearray(temp,foundpassword.class); string username=account.gettext().tostring().trim(); string pwd=password.gettext().tostring().trim(); string accountnum=loginmsginfo.get(0).getaccountnum(); string psaaword=foundpasswordinfo.get(0).getpassword(); if (account.equals(accountnum)&& pwd.equals(psaaword)) { //实现界面的跳转 intent intent = new intent(loginactivity.this,mainactivity.class); startactivity(intent); //关闭当前界面 finish(); }else{ //实现界面的跳转 intent intent = new intent(loginactivity.this,mainactivity.class); startactivity(intent); //关闭当前界面 finish(); // toast.maketext(loginactivity.this, "用户名或密码错误", 0).show(); } } } }; //主线程 new thread(){ public void run(){ message msg= new message(); try{ map<string,string> parmas=new hashmap<string,string>(); parmas.put("username","1"); parmas.put("password","2"); string loginmsgurl="http://192.168.1.110:8080/schoolshopjson/loginmsg.txt"; string foundpasswordurl="http://192.168.1.110:8080/schoolshopjson/foundpassword.txt"; //要发送的数据和访问的地址 string resultloginmsgstring=agentapi.dopost(parmas,loginmsgurl); string resultfpasswordstring=agentapi.dopost(parmas, foundpasswordurl); //发送handler信息 msg.what=1; msg.obj=resultloginmsgstring; }catch(exception e){ e.printstacktrace(); //使用-1代表程序异常 msg.what=-2; msg.obj=e; } mhandler.sendmessage(msg); } }.start(); } return false; } /** * 判断用户名和密码是否有效 * * @return */ public boolean isusernameandpwdvalid() { // 用户名和密码不得为空 if (account.gettext().tostring().trim().equals("")) { toast.maketext(this, getstring(r.string.accountname_empty), toast.length_short).show(); return false; } else if (password.gettext().tostring().trim().equals("")) { toast.maketext(this, getstring(r.string.password_empty), toast.length_short).show(); return false; } return true; } }
最后,我们来看一下运行效果,如果用户名和密码都正确跳到主页,如果用户名和密码错误给出提示,如下截图所示:
更多关于android相关内容感兴趣的读者可查看本站专题:《android布局layout技巧总结》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
上一篇: 4.5.1.1 mysql Options 配置项
下一篇: java this 用法详解及简单实例