注册功能的实现

注册时一般通过手机或者邮箱来注册,这里我选择利用手机号来注册;且注册时通常需要接收验证码,这里通过第三方的Mob平台的短信SDK来实现,第三方账号授权也是利用Mob的ShareSDK来实现的。注册完成后由客户端将注册信息提交至服务端进行注册,提交方式为HTTP的POST请求方式。

SignUpActivity.Java

package com.example.administrator.loginandregister.activity;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.TextUtils;

import android.util.Log;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.inputmethod.EditorInfo;

import android.widget.Button;

import android.widget.TextView;

import android.widget.TextView.OnEditorActionListener;

import android.widget.Toast;

import com.example.administrator.loginandregister.R;

import com.example.administrator.loginandregister.utils.RegexUtils;

import com.example.administrator.loginandregister.utils.ToastUtils;

import com.example.administrator.loginandregister.utils.VerifyCodeManager;

import com.example.administrator.loginandregister.views.CleanEditText;

import org.json.JSONException;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.Timer;

import java.util.TimerTask;

/**

* Created by JimCharles on 2016/11/27.

*/

public class SignUpActivity extends Activity implements OnClickListener {

  private static final String TAG = "SignupActivity";

  // 界面控件

  private CleanEditText phoneEdit;

  private CleanEditText passwordEdit;

  private CleanEditText verifyCodeEdit;

  private CleanEditText nicknameEdit;

  private Button getVerifiCodeButton;

  private Button createAccountButton;

  private VerifyCodeManager codeManager;

  String result = "";

  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_signup);

    initViews();

    codeManager = new VerifyCodeManager(this, phoneEdit, getVerifiCodeButton);

  }

  /**

  * 通过findViewById,减少重复的类型转换

  *

  * @param id

  * @return

  */

  @SuppressWarnings("unchecked")

  public final <E extends View> E getView(int id) {

    try {

      return (E) findViewById(id);

    } catch (ClassCastException ex) {

      Log.e(TAG, "Could not cast View to concrete class.", ex);

      throw ex;

    }

  }

  private void initViews() {

    getVerifiCodeButton = getView(R.id.btn_send_verifi_code);

    getVerifiCodeButton.setOnClickListener(this);

    createAccountButton = getView(R.id.btn_create_account);

    createAccountButton.setOnClickListener(this);

    phoneEdit = getView(R.id.et_phone);

    phoneEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);// 下一步

    verifyCodeEdit = getView(R.id.et_verifiCode);

    verifyCodeEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);// 下一步

    nicknameEdit = getView(R.id.et_nickname);

    nicknameEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);

    passwordEdit = getView(R.id.et_password);

    passwordEdit.setImeOptions(EditorInfo.IME_ACTION_DONE);

    passwordEdit.setImeOptions(EditorInfo.IME_ACTION_GO);

    passwordEdit.setOnEditorActionListener(new OnEditorActionListener() {

      @Override

      public boolean onEditorAction(TextView v, int actionId,

                    KeyEvent event) {

        // 点击虚拟键盘的done

        if (actionId == EditorInfo.IME_ACTION_DONE

            || actionId == EditorInfo.IME_ACTION_GO) {

          try {

            commit();

          } catch (IOException | JSONException e1) {

            e1.printStackTrace();

          }

        }

        return false;

      }

    });

  }

  private void commit() throws IOException, JSONException {

    String phone = phoneEdit.getText().toString().trim();

    String password = passwordEdit.getText().toString().trim();

    if (checkInput(phone, password)) {

      // TODO:请求服务端注册账号

      createAccountButton.setOnClickListener(new OnClickListener() {

        @Override

        public void onClick(View arg0) {

          //android4.0后的新的特性,网络数据请求时不能放在主线程中。

          //使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。

          final Handler handler = new Handler() {

            @Override

            public void handleMessage(Message msg) {

              if (msg.what == 1) {

                //提示读取结果

                Toast.makeText(SignUpActivity.this, result, Toast.LENGTH_LONG).show();

                if (result.contains("成")){

                  Toast.makeText(SignUpActivity.this, result, Toast.LENGTH_LONG).show();

                  ToastUtils.showShort(SignUpActivity.this,

                      "注册成功......");

                }

                else{

                  final Intent it = new Intent(SignUpActivity.this, LoginActivity.class); //你要转向的Activity

                  Timer timer = new Timer();

                  TimerTask task = new TimerTask() {

                    @Override

                    public void run() {

                      startActivity(it); //执行

                    }

                  };

                  timer.schedule(task, 1000); //1秒后

                }

              }

            }

          };

          // 启动线程来执行任务

          new Thread() {

            public void run() {

              //请求网络

              try {

                Register(phoneEdit.getText().toString(),passwordEdit.getText().toString(),nicknameEdit.getText().toString());

              } catch (IOException | JSONException e) {

                e.printStackTrace();

              }

              Message m = new Message();

              m.what = 1;

              // 发送消息到Handler

              handler.sendMessage(m);

            }

          }.start();

        }

      });

    }

  }

  private boolean checkInput(String phone, String password) {

    if (TextUtils.isEmpty(phone)) { // 电话号码为空

      ToastUtils.showShort(this, R.string.tip_phone_can_not_be_empty);

    } else {

      if (!RegexUtils.checkMobile(phone)) { // 电话号码格式有误

        ToastUtils.showShort(this, R.string.tip_phone_regex_not_right);

      } else if (password == null || password.trim().equals("")) {

        Toast.makeText(this, R.string.tip_password_can_not_be_empty,

            Toast.LENGTH_LONG).show();

      }else if (password.length() < 6 || password.length() > 32

          || TextUtils.isEmpty(password)) { // 密码格式

        ToastUtils.showShort(this,

            R.string.tip_please_input_6_32_password);

      } else {

        return true;

      }

    }

    return false;

  }

  public Boolean Register(String account, String passWord, String niceName) throws IOException, JSONException {

    try {

      String httpUrl="http://cdz.ittun.cn/cdz/user_register.php";

      URL url = new URL(httpUrl);//创建一个URL

      HttpURLConnection connection = (HttpURLConnection)url.openConnection();//通过该url获得与服务器的连接

      connection.setDoOutput(true);

      connection.setDoInput(true);

      connection.setRequestMethod("POST");//设置请求方式为post

      connection.setConnectTimeout(3000);//设置超时为3秒

      //设置传送类型

      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      connection.setRequestProperty("Charset", "utf-8");

      //提交数据

      String data = "&name=" + URLEncoder.encode(niceName, "UTF-8")+"&cardid="

          + "&passwd=" +passWord+ "&money=0"+ "&number=" + account;//传递的数据

      connection.setRequestProperty("Content-Length",String.valueOf(data.getBytes().length));

      ToastUtils.showShort(this,

          "数据提交成功......");

      //获取输出流

      OutputStream os = connection.getOutputStream();

      os.write(data.getBytes());

      os.flush();

      //获取响应输入流对象

      InputStreamReader is = new InputStreamReader(connection.getInputStream());

      BufferedReader bufferedReader = new BufferedReader(is);

      StringBuffer strBuffer = new StringBuffer();

      String line = null;

      //读取服务器返回信息

      while ((line = bufferedReader.readLine()) != null){

        strBuffer.append(line);

      }

      result = strBuffer.toString();

      is.close();

      connection.disconnect();

    } catch (Exception e) {

      return true;

    }

    return false;

  }

  @Override

  public void onClick(View v) {

    switch (v.getId()) {

      case R.id.btn_send_verifi_code:

        // TODO 请求接口发送验证码

        codeManager.getVerifyCode(VerifyCodeManager.REGISTER);

        break;

      case R.id.btn_create_account:

        try {

          commit();

          } catch (IOException | JSONException e) {

          e.printStackTrace();

        }

        break;

      default:

        break;

    }

  }

}注册功能的实现

注册时一般通过手机或者邮箱来注册,这里我选择利用手机号来注册;且注册时通常需要接收验证码,这里通过第三方的Mob平台的短信SDK来实现,第三方账号授权也是利用Mob的ShareSDK来实现的。注册完成后由客户端将注册信息提交至服务端进行注册,提交方式为HTTP的POST请求方式。

SignUpActivity.Java

package com.example.administrator.loginandregister.activity;


import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.TextUtils;

import android.util.Log;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.inputmethod.EditorInfo;

import android.widget.Button;

import android.widget.TextView;

import android.widget.TextView.OnEditorActionListener;

import android.widget.Toast;


import com.example.administrator.loginandregister.R;

import com.example.administrator.loginandregister.utils.RegexUtils;

import com.example.administrator.loginandregister.utils.ToastUtils;

import com.example.administrator.loginandregister.utils.VerifyCodeManager;

import com.example.administrator.loginandregister.views.CleanEditText;


import org.json.JSONException;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.Timer;

import java.util.TimerTask;


/**

* Created by JimCharles on 2016/11/27.

*/


public class SignUpActivity extends Activity implements OnClickListener {

  private static final String TAG = "SignupActivity";

  // 界面控件

  private CleanEditText phoneEdit;

  private CleanEditText passwordEdit;

  private CleanEditText verifyCodeEdit;

  private CleanEditText nicknameEdit;

  private Button getVerifiCodeButton;

  private Button createAccountButton;


  private VerifyCodeManager codeManager;

  String result = "";


  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_signup);


    initViews();

    codeManager = new VerifyCodeManager(this, phoneEdit, getVerifiCodeButton);

  }


  /**

  * 通过findViewById,减少重复的类型转换

  *

  * @param id

  * @return

  */

  @SuppressWarnings("unchecked")

  public final <E extends View> E getView(int id) {

    try {

      return (E) findViewById(id);

    } catch (ClassCastException ex) {

      Log.e(TAG, "Could not cast View to concrete class.", ex);

      throw ex;

    }

  }


  private void initViews() {


    getVerifiCodeButton = getView(R.id.btn_send_verifi_code);

    getVerifiCodeButton.setOnClickListener(this);

    createAccountButton = getView(R.id.btn_create_account);

    createAccountButton.setOnClickListener(this);

    phoneEdit = getView(R.id.et_phone);

    phoneEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);// 下一步

    verifyCodeEdit = getView(R.id.et_verifiCode);

    verifyCodeEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);// 下一步

    nicknameEdit = getView(R.id.et_nickname);

    nicknameEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);

    passwordEdit = getView(R.id.et_password);

    passwordEdit.setImeOptions(EditorInfo.IME_ACTION_DONE);

    passwordEdit.setImeOptions(EditorInfo.IME_ACTION_GO);

    passwordEdit.setOnEditorActionListener(new OnEditorActionListener() {


      @Override

      public boolean onEditorAction(TextView v, int actionId,

                    KeyEvent event) {

        // 点击虚拟键盘的done

        if (actionId == EditorInfo.IME_ACTION_DONE

            || actionId == EditorInfo.IME_ACTION_GO) {

          try {

            commit();

          } catch (IOException | JSONException e1) {

            e1.printStackTrace();

          }

        }

        return false;

      }

    });

  }


  private void commit() throws IOException, JSONException {

    String phone = phoneEdit.getText().toString().trim();

    String password = passwordEdit.getText().toString().trim();


    if (checkInput(phone, password)) {

      // TODO:请求服务端注册账号

      createAccountButton.setOnClickListener(new OnClickListener() {


        @Override

        public void onClick(View arg0) {

          //android4.0后的新的特性,网络数据请求时不能放在主线程中。

          //使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。

          final Handler handler = new Handler() {

            @Override

            public void handleMessage(Message msg) {

              if (msg.what == 1) {

                //提示读取结果

                Toast.makeText(SignUpActivity.this, result, Toast.LENGTH_LONG).show();

                if (result.contains("成")){

                  Toast.makeText(SignUpActivity.this, result, Toast.LENGTH_LONG).show();

                  ToastUtils.showShort(SignUpActivity.this,

                      "注册成功......");

                }

                else{

                  final Intent it = new Intent(SignUpActivity.this, LoginActivity.class); //你要转向的Activity

                  Timer timer = new Timer();

                  TimerTask task = new TimerTask() {

                    @Override

                    public void run() {

                      startActivity(it); //执行

                    }

                  };

                  timer.schedule(task, 1000); //1秒后

                }

              }

            }

          };

          // 启动线程来执行任务

          new Thread() {

            public void run() {

              //请求网络

              try {

                Register(phoneEdit.getText().toString(),passwordEdit.getText().toString(),nicknameEdit.getText().toString());

              } catch (IOException | JSONException e) {

                e.printStackTrace();

              }

              Message m = new Message();

              m.what = 1;

              // 发送消息到Handler

              handler.sendMessage(m);

            }

          }.start();

        }

      });

    }

  }


  private boolean checkInput(String phone, String password) {

    if (TextUtils.isEmpty(phone)) { // 电话号码为空

      ToastUtils.showShort(this, R.string.tip_phone_can_not_be_empty);

    } else {

      if (!RegexUtils.checkMobile(phone)) { // 电话号码格式有误

        ToastUtils.showShort(this, R.string.tip_phone_regex_not_right);

      } else if (password == null || password.trim().equals("")) {

        Toast.makeText(this, R.string.tip_password_can_not_be_empty,

            Toast.LENGTH_LONG).show();

      }else if (password.length() < 6 || password.length() > 32

          || TextUtils.isEmpty(password)) { // 密码格式

        ToastUtils.showShort(this,

            R.string.tip_please_input_6_32_password);

      } else {

        return true;

      }

    }

    return false;

  }


  public Boolean Register(String account, String passWord, String niceName) throws IOException, JSONException {

    try {

      String httpUrl="http://cdz.ittun.cn/cdz/user_register.php";

      URL url = new URL(httpUrl);//创建一个URL

      HttpURLConnection connection = (HttpURLConnection)url.openConnection();//通过该url获得与服务器的连接

      connection.setDoOutput(true);

      connection.setDoInput(true);

      connection.setRequestMethod("POST");//设置请求方式为post

      connection.setConnectTimeout(3000);//设置超时为3秒

      //设置传送类型

      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      connection.setRequestProperty("Charset", "utf-8");

      //提交数据

      String data = "&name=" + URLEncoder.encode(niceName, "UTF-8")+"&cardid="

          + "&passwd=" +passWord+ "&money=0"+ "&number=" + account;//传递的数据

      connection.setRequestProperty("Content-Length",String.valueOf(data.getBytes().length));

      ToastUtils.showShort(this,

          "数据提交成功......");


      //获取输出流

      OutputStream os = connection.getOutputStream();

      os.write(data.getBytes());

      os.flush();

      //获取响应输入流对象

      InputStreamReader is = new InputStreamReader(connection.getInputStream());

      BufferedReader bufferedReader = new BufferedReader(is);

      StringBuffer strBuffer = new StringBuffer();

      String line = null;

      //读取服务器返回信息

      while ((line = bufferedReader.readLine()) != null){

        strBuffer.append(line);

      }

      result = strBuffer.toString();

      is.close();

      connection.disconnect();

    } catch (Exception e) {

      return true;

    }

    return false;

  }


  @Override

  public void onClick(View v) {

    switch (v.getId()) {

      case R.id.btn_send_verifi_code:

        // TODO 请求接口发送验证码

        codeManager.getVerifyCode(VerifyCodeManager.REGISTER);

        break;

      case R.id.btn_create_account:

        try {

          commit();

          } catch (IOException | JSONException e) {

          e.printStackTrace();

        }

        break;


      default:

        break;

    }

  }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,321评论 6 543
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,559评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,442评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,835评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,581评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,922评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,931评论 3 447
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,096评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,639评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,374评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,591评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,104评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,789评论 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,196评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,524评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,322评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,554评论 2 379

推荐阅读更多精彩内容

  • 一 model设计 开始确定注册模块的数据库中的字段,包括姓名,密码,邮箱,地址,邮编,电话号码等. 二 设计注册...
    文子轩阅读 309评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,826评论 18 139
  • 折叠梯子:平时折叠起来节省空间,也利于美观;用的时候打开当梯子用,很方便。 折叠凳子:平时折叠起来节省空间,利于存...
    renap阅读 244评论 0 0
  • 第二章 回忆(1) 金在中第一次遇见郑允浩时刚上高中不到一个星期。隐约记得那天的天气有点热,刚放学也正值下班点,所...
    阿呆的同行人阅读 669评论 0 1
  • 子弹穿过失衡的旋风射穿了 一个年轻人的生命 母亲的哭声使大地像烟一样沉落 包公在天之灵不会想到 六月飞雪会在今天发...
    舒严阅读 214评论 0 0