安卓,在小编实习之前的那段岁月里面,小编都没有玩儿过,如果说玩儿过,那就是安卓手机了,咳咳,敲登录的时候有种特别久违的熟悉,这种熟悉的感觉就和当时敲机房收费系统一样,那叫一个艰难啊,不过小编相信,在小编的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;
		}
}

最后,我们来看一下运行效果,如果用户名和密码都正确跳到主页,如果用户名和密码错误给出提示,如下截图所示:

小编寄语:该博客,小编主要简单的介绍了如何实现安卓登录,但是说实在的,小编到现在还是云里雾里,对于xml布局页面,小编也不熟练,不过没关系,小编会越挫越勇的,这就是生命的意义,还是那句话对于小编来说,既是挑战更是机遇,因为知识都是相通的,再者来说,在小编的程序人生中,留下最珍贵的记忆,虽然以后小编不一定从事安卓这个行业,代码世界里,很多种事,有的甜蜜,有的温馨,有的婉转成歌,有的绵延不息,在这些故事里,我们唯一的共通之处就是,某年,某月,某个波澜不惊的日子里,曾经很爱很爱你!爱你--这段实习的日子里,安卓带给小编的种种的惊喜。

Android实现登录小demo的更多相关文章

  1. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

  2. 记写 android 微信登录的demo历程

    前言 首先看一条链接: https://github.com/Tencent/WeDemo 腾讯给了一个wedemo,微信第三方登录的例子.里面是php和ios,ios是object写的,php还是原 ...

  3. Android -- 自定义View小Demo,绘制四位数随机码(一)

    1,现在有这样一个需求,实现显示随机随机数可能在代码中直接很简单的就实现了,但是现在我们直接自定义View来实现这个效果,那么我们来分析一波吧,我们允许开发者自己设置这个textview的大小,颜色, ...

  4. Android设计模式---观察者模式小demo(一)

    1,今天刚好看到了设计模式这一块来,而观察者模式是我一直想总结的,先来看看观察者模式的简单的定义吧 "当一个对象改变时,他的所有依赖者都会受到通知,并自动更新." 一般我们项目中就 ...

  5. Android -- 自定义View小Demo,绘制钟表时间(一)

    1,昨天刚看了hongyang大神推荐的自定义时钟效果(传动门:http://www.jianshu.com/users/a45d19d680af/),效果还是不错的,自己又在github上找了找,发 ...

  6. Android -- 自定义View小Demo,关于Rect绘制Android机器人(一)

    1,关于Rect和RectF类的区别以前一直没有去关注它,刚刚了解了一下才知道都是用来确定矩形的区域,不过Rect是int类型的坐标而RectF是float类型的坐标,所以说RectF要更加精确.现在 ...

  7. Android -- 自定义View小Demo(一)

    1,现在要实现下图的简单效果,很简单  ,就是使用paint在canvas上绘制5中不同颜色的圆圈,效果图如下: 这是绘制基本图形一种最简单的方法,下面是它的代码 ,注释写的很详细,也就不去讲解了 M ...

  8. SpringSecurity实战记录(一)开胃菜:基于内存的表单登录小Demo搭建

    Ps:本次搭建基于Maven管理工具的版本,Gradle版本可以通过gradle init --type pom命令在pom.xml路径下转化为Gradle版本(如下图) (1)构建工具IDEA In ...

  9. Android -- 自定义View小Demo,关于Path类的使用(一)

    1,在我们知道自定义view中onDraw()方法是用于绘制图形的,而Path类则是其中的一个重要的类,如下图效果: 代码也没有什么难度,直接贴出来吧 @Override protected void ...

随机推荐

  1. Python3 中 random模块

    Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() #用于生成一个0到1的 随机浮点数:0<= n < 1.0 im ...

  2. jqGrid 使用心得

    参考: https://blog.csdn.net/u012411219/article/details/51315419 https://www.cnblogs.com/kissdodog/p/38 ...

  3. SpringMVC中HandlerMapping的三种配置方式

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-/ ...

  4. IE下iframe跨域session和cookie失效问题的解决方案

    http://blog.csdn.net/wauit/article/details/9875157

  5. 数组查找算法的C语言 实现-----线性查找和二分查找

    线性查找  Linear Search 用户输入学生学号的成绩 二分查找  Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵

  6. Spring cloud 学习资料整理

    推荐博客 纯洁的微笑 程序猿DD liaokailin的专栏 周立 Spring Cloud 方志朋 Spring Cloud 专栏 许进 跟我学Spring Cloud 推荐网站 Spring Cl ...

  7. 整理spring定时器corn表达式

    1.结构 corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 2.各字段的含义   字段 允许值 允许的特殊字符 秒 0~59 - * / 分 0~59 - * / ...

  8. python笔记三(list、tuple)

    一.list list的增删改查 #增, classmates.append("nadech") #在末尾追加一个元素 classmates.insert(1,"agui ...

  9. 豌豆夹Redis解决方案Codis源码剖析:Dashboard

    豌豆夹Redis解决方案Codis源码剖析:Dashboard 1.不只是Dashboard 虽然名字叫Dashboard,但它在Codis中的作用却不可小觑.它不仅仅是Dashboard管理页面,更 ...

  10. Linux命令行总结

    1.修改同一目录下所有图片的尺寸(宽x高) 长宽比不变&长宽比改变 find ./ -name '*.jpg' -exec convert -resize 600x480 {} {} \; f ...