Android开发中实现用户注册和登陆的代码实例分享_java

在android的应用中越来越多的包含了网络互动功能,这就带来了注册,登陆账号功能。本文完整的介绍对话框的方式实现用户登陆功能。

登陆效果: 应用程序判断当前用户还未登陆,弹出登陆对话框,用户输入账号和密码信息后,传到服务器验证,验证成功后,现实Toast 成功信息,并转到其他界面。

注册效果:用户如没有账号,则点击登陆对话框的 "没有账号,快速注册账号", 弹出注册界面,用户输入注册信息,点击注册按钮,注册成功后,弹出toast信息"注册成功",完成注册后,转到其他功能界面。

整个功能大体上分两块:登陆对话框:输入登陆信息,实现登陆功能,转到注册界面。注册对话框:输入注册信息,实现注册功能。

对话框界面布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">

  <TextView
   android:id="@+id/txt_loginerror"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:textColor="#ff0000"
   android:text="输入的账号和密码不正确"
   android:gravity="left"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:visibility="invisible"
  />

  <TextView
   android:id="@+id/username"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:text="账号"
   android:gravity="left"
   android:textAppearance="?android:attr/textAppearanceMedium"
  />

  <EditText
   android:id="@+id/txt_username"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:autoText="false"
   android:capitalize="none"
   android:gravity="fill_horizontal"
   android:textAppearance="?android:attr/textAppearanceMedium"
   />
  <TextView
   android:id="@+id/password"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:text="密码"
   android:gravity="left"
   />
  <EditText
   android:id="@+id/txt_password"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:autoText="false"
   android:capitalize="none"
   android:gravity="fill_horizontal"
   android:textAppearance="?android:attr/textAppearanceMedium"
   />

    <TextView
   android:id="@+id/txt_toregister"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:textColor="#2200C1"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:text="没有账号?快速注册"
   android:gravity="left"
   />

</LinearLayout>

后台业务逻辑:

/*
  * 创建用户登陆的对话框
  * 登陆界面包含两个按钮
  * 1按钮为登陆
  * 2按钮为不登陆试玩
  * */
  private void CreateLoginAlert()
  {
    AlertDialog.Builder ad =new AlertDialog.Builder(this);
    ad.setTitle("账号登陆");
    ad.setView(ViewUtility.GetView(this,R.layout.sub_logindialog));
    adi= ad.create();

  /*
    */
    adi.setButton("登陆", new OnClickListener(){
      @Override
      public void onClick(DialogInterface arg0, int arg1) {

        EditText password=  (EditText)adi.findViewById(R.id.txt_password);
        EditText account =(EditText)adi.findViewById(R.id.txt_username);

        PassWord=password.getText().toString();
        Account=account.getText().toString();
        //生成登陆对话框
        m_Dialog=ProgressDialog.show(Main.this, "请等待...", "正在为你登陆...",true);
        mRedrawHandler.sleep(100);
      }
    });

    adi.setButton2("试 玩", new OnClickListener(){
      @Override
      public void onClick(DialogInterface arg0, int arg1) {
        ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
      }
    });

    adi.show(); 

    //设置注册点击事件
    TextView register=(TextView)adi.findViewById(R.id.txt_toregister);
    register.setOnClickListener(new TextView.OnClickListener()
    {
     public void onClick(View v){
       //创建注册对话框
      CreateRegisterAlert();
       adi.dismiss();

     }
   });

  }

  /*
  *定时线程做验证用
  * */
  private RefreshHandler mRedrawHandler = new RefreshHandler();

  class RefreshHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {

      try{

        //调用网络接口,实现登陆指令
       Boolean flags=  UserDataServiceHelper.Login(Account, PassWord);
       if(flags)
       {
        //保存登陆信息
        UserDataWriteHelper uw=new UserDataWriteHelper(Main.this);
        uw.SaveUserInfoInDB("xuwenbing", Account);
        //提示登陆成功
        Toast.makeText(Main.this, "登陆成功", Toast.LENGTH_SHORT).show();
        //转到主题页面
         ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
       }else
       {
        //失败 显示错误信息
        Toast.makeText(Main.this, "登陆失败", Toast.LENGTH_SHORT).show();
        adi.show();
        adi.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);
        }
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
      finally{
        m_Dialog.dismiss();
      }
    }
    public void sleep(long delayMillis) {
      this.removeMessages(0);
      sendMessageDelayed(obtainMessage(0), delayMillis);
    }
  };

对话框界面布局xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">

  <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:gravity="center"
  >
  <TextView
   android:id="@+id/txt_loginerror"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:textColor="#ff0000"
   android:text="输入的账号和密码不正确"
   android:gravity="left"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:visibility="invisible"
  />
  </LinearLayout>

  <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"

  >
  <TextView
   android:id="@+id/username"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:text="账号"
   android:gravity="left"
   android:textAppearance="?android:attr/textAppearanceMedium"
  />

  <EditText
   android:id="@+id/txt_username"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:autoText="false"
   android:capitalize="none"
   android:gravity="fill_horizontal"
   android:textAppearance="?android:attr/textAppearanceMedium"
   />
   </LinearLayout>

    <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"

  >
  <TextView
   android:id="@+id/password"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:text="密码"
   android:gravity="left"
   />
  <EditText
   android:id="@+id/txt_password"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:autoText="false"
   android:capitalize="none"
   android:gravity="fill_horizontal"
   android:textAppearance="?android:attr/textAppearanceMedium"
   />
   </LinearLayout>
    <LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal"
  >
    <TextView
   android:id="@+id/nicename"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:text="昵称"
   android:gravity="left"
   />
  <EditText
   android:id="@+id/txt_nicename"
   android:layout_height="wrap_content"
   android:layout_width="fill_parent"
   android:layout_marginLeft="20dip"
   android:layout_marginRight="20dip"
   android:autoText="false"
   android:capitalize="none"
   android:gravity="fill_horizontal"
   android:textAppearance="?android:attr/textAppearanceMedium"
   />

  </LinearLayout>

</LinearLayout>

后台业务逻辑:

/*创建注册对话框*/
  private void CreateRegisterAlert()
  {
    //registerdialog
    AlertDialog.Builder ad =new AlertDialog.Builder(this);
    ad.setTitle("注册账号");
    ad.setView(ViewUtility.GetView(this,R.layout.sub_registerdialog));
    registerdialog= ad.create();

    registerdialog.setButton("注册", new OnClickListener(){
      @Override
      public void onClick(DialogInterface arg0, int arg1) {

        EditText password=  (EditText)registerdialog.findViewById(R.id.txt_password);
        EditText account =(EditText)registerdialog.findViewById(R.id.txt_username);
        EditText nicename =(EditText)registerdialog.findViewById(R.id.txt_nicename);

        PassWord=password.getText().toString();
        Account=account.getText().toString();
        NiceName=nicename.getText().toString();
        //生成注册对话框
        m_Dialog=ProgressDialog.show(Main.this, "请等待...", "正在为你注册...",true);
        mRegsiterHandler.sleep(100);
      }
    });

    registerdialog.setButton2("试 玩", new OnClickListener(){
      @Override
      public void onClick(DialogInterface arg0, int arg1) {
        ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
      }
    });

    registerdialog.show();
  }
  /*
  *定时注册程序
  * */
  private RegsiterHandler mRegsiterHandler = new RegsiterHandler();

  class RegsiterHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {

      try{

        //调用网络接口,实现注册指令
       Boolean flags=  UserDataServiceHelper.Register(Account, PassWord,NiceName);
       if(flags)
       {
        //保存注册信息
        UserDataWriteHelper uw=new UserDataWriteHelper(Main.this);
        uw.SaveUserInfoInDB("xuwenbing", Account);
        //提示注册成功
        Toast.makeText(Main.this, "注册成功", Toast.LENGTH_SHORT).show();
        //转到主题页面
         ViewUtility.NavigateActivate(Main.this, SelectTheme.class);
       }else
       {
        //失败 显示错误信息
        Toast.makeText(Main.this, "注册失败", Toast.LENGTH_SHORT).show();
        registerdialog.show();
        registerdialog.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);
        }
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
      finally{
        m_Dialog.dismiss();
      }
    }
    public void sleep(long delayMillis) {
      this.removeMessages(0);
      sendMessageDelayed(obtainMessage(0), delayMillis);
    }
  };

两个网络接口功能:

//调用网络接口,实现登陆指令
Boolean flags=  UserDataServiceHelper.Login(Account, PassWord);
//调用网络接口,实现注册指令
Boolean flags=  UserDataServiceHelper.Register(Account, PassWord,NiceName);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 登陆
, 注册
用户
android实现分享功能、android实现微信分享、android 实现分享链接、android 如何实现分享、android实现用户登录,以便于您获取更多的相关知识。

时间: 2024-11-08 20:20:30

Android开发中实现用户注册和登陆的代码实例分享_java的相关文章

Android开发中DatePicker日期与时间控件实例代码

一.简介 二.方法 最日常的使用方法了 日期控件DatePicker 时间控件TimePicker 月份从0开始 三.代码实例 效果图: 代码: fry.Activity01 package fry; import com.example.DatePicherDemo1.R; import android.app.Activity; import android.os.Bundle; import android.widget.DatePicker; import android.widget.

android开发中获取手机上可用SD卡方法分享

现在的android手机型号复杂多样,造成了开发过程中使用官方的获取sd卡的方法在部分的手机上并不适用,所以需要进行开发的自己封装,以下就是代码,希望分享出来,大家共同学习 /*** 获取手机sd卡的工具类* @author wy*/public class SDCardUtils {/** avoid initializations of tool classes*/private SDCardUtils() {// TODO Auto-generated constructor stub}

Android开发中一个简单实用的调试应用技巧分享

前言 大家应该都有所体会,在应用开发中,我们常常会进行日志打印或者debug调试,以此来分析运行时的一些信息,便于发现bug和问题.Android Studio的Debug功能很好用,但是有时候有些情况下,就显得不是那么快捷和便利. 比如 我们调试的点在应用一打开的时候,很靠前,例如Application的onCreate方法中,以至于我们不能足够快的设置进程为debug模式 虽然上面的情况可以通过Android Studio的debug运行来解决,但是如果项目很大的话,运行起来也会比较耽误时间

android开发中动态添加view的两个实例

举个例子:比如要在一个LinearLayout中添加一个Button,  子view是Button,父view是LinearLayout. 子view的属性就是通过LayoutParams来设置的,注意是LinearLayout.LayoutParams,因为子view的高度,宽度这些都是针对父view的,要告诉父view自己要占用多大空间,所以是LinearLayout(原来总是会用子view的LayoutParams来设置,错误) public class MyActivity extend

Android开发中内存缓存LruCache实现原理及实例应用

先分析内存缓存是如何实现的,开始进入正题. BitmapUtils内存缓存的核心类LruMemoryCache,LruMemoryCache代码和v4包的LruCache一样,只是加了一个存储超期的处理,这里分析LruCache源码.LRU即Least Recently Used,近期最少使用算法.也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用的对象移除,有效的避免了OOM的出现. 讲到LruCache不得不提一下LinkedHashMap,因为LruCache中Lru算法的实现就是

Android App中实现相册瀑布流展示的实例分享_Android

传统界面的布局方式总是行列分明.坐落有序的,这种布局已是司空见惯,在不知不觉中大家都已经对它产生了审美疲劳.这个时候瀑布流布局的出现,就给人带来了耳目一新的感觉,这种布局虽然看上去貌似毫无规律,但是却有一种说不上来的美感,以至于涌现出了大批的网站和应用纷纷使用这种新颖的布局来设计界面. 记得我在之前已经写过一篇关于如何在Android上实现照片墙功能的文章了,但那个时候是使用的GridView来进行布局的,这种布局方式只适用于"墙"上的每张图片大小都相同的情况,如果图片的大小参差不齐,

Android App中实现相册瀑布流展示的实例分享

传统界面的布局方式总是行列分明.坐落有序的,这种布局已是司空见惯,在不知不觉中大家都已经对它产生了审美疲劳.这个时候瀑布流布局的出现,就给人带来了耳目一新的感觉,这种布局虽然看上去貌似毫无规律,但是却有一种说不上来的美感,以至于涌现出了大批的网站和应用纷纷使用这种新颖的布局来设计界面. 记得我在之前已经写过一篇关于如何在Android上实现照片墙功能的文章了,但那个时候是使用的GridView来进行布局的,这种布局方式只适用于"墙"上的每张图片大小都相同的情况,如果图片的大小参差不齐,

Android App中实现图片异步加载的实例分享_Android

一.概述一般大量图片的加载,比如GridView实现手机的相册功能,一般会用到LruCache,线程池,任务队列等:那么异步消息处理可以用哪呢? 1.用于UI线程当Bitmap加载完成后更新ImageView 2.在图片加载类初始化时,我们会在一个子线程中维护一个Loop实例,当然子线程中也就有了MessageQueue,Looper会一直在那loop停着等待消息的到达,当有消息到达时,从任务队列按照队列调度的方式(FIFO,LIFO等),取出一个任务放入线程池中进行处理. 简易的一个流程:当需

Android的OkHttp包处理用户认证的代码实例分享_Android

OkHttp 提供了对用户认证的支持.当 HTTP 响应的状态代码是 401 时,OkHttp 会从设置的 Authenticator 对象中获取到新的 Request 对象并再次尝试发出请求.Authenticator 接口中的 authenticate 方法用来提供进行认证的 Request 对象,authenticateProxy 方法用来提供对代理服务器进行认证的 Request 对象. 用户认证的示例: OkHttpClient client = new OkHttpClient();