欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现登录功能demo示例

程序员文章站 2024-03-05 13:08:06
本文实例讲述了android实现登录功能的方法。分享给大家供大家参考,具体如下: 安卓,在小编实习之前的那段岁月里面,小编都没有玩儿过,如果说玩儿过,那就是安卓手机了,咳...

本文实例讲述了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实现登录功能demo示例

更多关于android相关内容感兴趣的读者可查看本站专题:《android布局layout技巧总结》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。