当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现登录功能demo示例

Android实现登录功能demo示例

2019年07月24日  | 移动技术网IT编程  | 我要评论

三宿山,mc说唱麦词,翠石琴音

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网