Android登录界面之用户数据保存+服务器上传
来源:互联网 发布:seo主管工作内容 编辑:程序博客网 时间:2024/06/05 00:33
【界面改动】
根据以往app注册经验,将界面改成以下图所示:
通过app手机验证码的发送来注册,手机短信验证是企业给消费者(用户)的一个凭证,通过手机短信内容的验证码来验证身份。目前使用的最普遍的有各大银行网上银行、网上商城、团购网站、票务公司等。手机短信验证利用短信验证码来注册会员,大大降低了非法注册,烂注册的数据。
=================================================================================
在注册同时,需要检测手机号码是否为手机号格式:
- /**
- *
- * 判断字符串格式是否为手机号格式
- *
- * 处理字符串时去掉首尾空格 判断依据
- *
- * java-正则表达式判断手机号
- *
- * 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段,
- *
- * 故先要整清楚现在已经开放了多少个号码段,国家号码段分配如下:
- *
- * 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
- *
- * 联通:130、131、132、152、155、156、185、186
- *
- * 电信:133、153、180、189、(1349卫通)
- *
- * @param phone_num
- * @return true:是 false:不是
- */
- public static boolean isPhoneNum(String phone_num) {
- Pattern p = Pattern
- .compile("^((13[0-9])|(15[^4,\\D])|(14[0-9])|(17[0-9])|(18[0-9]))\\d{8}$");
- Matcher m = p.matcher(phone_num);
- return m.matches();
- }
================================================================================
【注册类正式使用】:使用afinal框架,虽然说现在afinal框架好久没有更新了,但是习惯了使用它在没有习惯使用xutil3 时候暂时还没有抛弃打算
- public class RegisterActivity extends Activity implements OnClickListener{
- private EditText phone;
- private TextView getCode;
- private EditText code;
- private EditText pwd; // 密码
- private EditText repwd;
- private Button login_ok;
- ProgressBar progressBar;
- Handler handler;
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_register);
- init();
- //Activity管理器,负责添加到队列
- MyActivityManager.addActivity(this);
- findViewById(R.id.iv_back_of_register).setOnClickListener(this);
- findViewById(R.id.tv_login).setOnClickListener(this);
- handler=new Handler(){
- public void handleMessage(Message msg) {
- if (msg.what == 0x1122) {
- ConfigUtil.ProgressBarOff(progressBar);
- startActivity(new Intent(RegisterActivity.this,
- GuideSelect.class));
- finish();
- }
- }
- };
- login_ok.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- if(ConfigUtil.isPhoneNum(phone.getText().toString()))
- login_Button();
- else
- Toast.makeText(getApplicationContext(), "手机号码格式不正确", 1).show();
- }
- });
- }
- /*
- * 获得组件对象
- */
- public void init(){
- progressBar=(ProgressBar)findViewById(R.id.login_progressBar);
- phone=(EditText)findViewById(R.id.register_username);
- getCode=(TextView)findViewById(R.id.getcode);
- code=(EditText)findViewById(R.id.code);
- pwd=(EditText)findViewById(R.id.register_password1);
- repwd=(EditText)findViewById(R.id.register_password2);
- login_ok=(Button)findViewById(R.id.register_ok_button);
- }
- public void login_Button(){
- if (isUserPwdRight() && isUserRight(phone.getText().toString())) {
- register(phone.getText().toString(), pwd.getText().toString(), code
- .getText().toString(), ConfigField.ServerUrl.RegisterUrl);
- }
- }
- /**
- * 向服务器提交注册数据
- *
- * 向服务提交前需保证 1.用户名,密码合法 2.前后输入的密码相同 3.网络连接是否正常
- *
- * @param phone
- * :用户名
- * @param userPwd
- * :密码
- * @param code
- * :验证码
- * @param url
- * :提交的地址
- */
- public void register(String phone,String pwd,String code,String url){
- AjaxParams param=new AjaxParams();
- param.put("username", phone);
- String md5pwd=MD5Util.MD5(pwd);
- param.put("pwd", md5pwd);
- param.put("code", code);
- FinalHttp finalhttp=new FinalHttp();
- finalhttp.post(url, param, new AjaxCallBack<String>() {
- public void onSuccess(String t){
- super.onSuccess(t);
- try {
- JSONObject json=new JSONObject();
- JSONObject jsondata=json.getJSONObject("data");
- if(jsondata.has("user_id")){
- int user_id=Integer.parseInt(jsondata.getString("user_id"));
- System.out.println(user_id+"");
- ConfigField.Flag.setMyID(user_id);
- goToGuideActivity();
- }
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("Wrong is jumping out,you can't submit you logInfo");
- }
- }
- /*
- * 成功后将服务器发起请求,得到用户id,调用数据库,将用户数据存储在数据库中
- */
- private void goToGuideActivity() {
- // TODO Auto-generated method stub
- new Thread(){
- public void run(){
- FinalHttp finalhttp=new FinalHttp();
- int id=ConfigField.Flag.getMyID();
- finalhttp.get(ConfigField.ServerUrl.RegisterUrl,new AjaxCallBack<String>(){
- public void onSuccess(String t) {
- try {
- JSONObject jsonObject = new JSONObject(t);
- User user = new User();
- JSONObject jsonUser=jsonObject.getJSONObject("data");
- user.setUser_id(jsonUser.getInt("user_id"));
- Userdb ud = new Userdb(getApplicationContext());
- ud.clear();
- ud.addOne(user);
- ConfigField.Flag.setMy(user);
- To_MainUI();//跳转主界面
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void onFailure(Throwable t,
- int errorNo, String strMsg) {
- ConfigUtil.ProgressBarOff(progressBar);
- Toast.makeText(getApplicationContext(), "失败",1).show();
- };
- });
- }
- }.start();
- }
- public void onFailure(Throwable t, int errorNo, String strMsg){
- super.onFailure(t, errorNo, strMsg);
- System.out.println("------"+strMsg+"------");
- Toast.makeText(getApplicationContext(), "联网失败", 1).show();
- }
- });
- }
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- switch(v.getId()){
- case R.id.iv_back_of_register:
- finish();
- break;
- case R.id.tv_login:
- startActivity(new Intent(this,LogInActivity.class));
- finish();
- break;
- }
- }
- /**
- * 判断用户名是否合法
- *
- * @param name
- * @return
- */
- public boolean isUserRight(String phone) {
- if (phone.equals("")) {
- www.zhy.nomalutils.ToastUtil.show_text(getApplicationContext(), "电话或姓名不能为空");
- return false;
- } else
- return true;
- }
- public void To_MainUI() {
- startActivity(new Intent(RegisterActivity.this, GuideSelect.class));
- RegisterActivity.this.finish();
- }
- /**
- * 判断用户密码是否合法
- *
- * @param pwd
- * @return
- */
- public boolean isUserPwdRight() {
- if (repwd.getText().toString().equals(pwd.getText().toString())
- && !pwd.getText().toString().equals(""))
- return true;
- else {
- if (pwd.getText().toString().equals(""))
- www.zhy.nomalutils.ToastUtil.show_text(getApplicationContext(), "密码不能为空。");
- else
- www.zhy.nomalutils.ToastUtil.show_text(getApplicationContext(), "两次密码不正确。");
- return false;
- }
- }
- }
===============================================================================
【数据库】
以上涉及到数据库代码:
afinal框架创建数据库非常简单方便,具体可以看一下链接:https://github.com/yangfuhai/afinal
首先建立用户User类:
- public class User implements DataModel {
- /*
- * 用户信息封装类
- */
- @Id(column = "id")
- private int id;
- private String name;
- private String tel;
- public String getStatusInfo() {
- return statusInfo;
- }
- private int user_id;
- private int status;
- public User() {
- name = "用户";
- }
- public int getUser_id() {
- return user_id;
- }
- public void setUser_id(int user_id) {
- this.user_id = user_id;
- }
- }
需要注意的一点:
//这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性
刚开始学习的时候忽略掉了,所以导致创建不成功,同时权限问题的添加也需要注意。
================================================================================
【URL】:
专门建立一个静态类来调用URL例如:
- public static class ServerUrl {
- // 登录
- public static final String LoginUrl = "http://kaka.ileban.com/index.php/Api/User/login";
- // 注册
- public static final String RegisterUrl = "http://kaka.ileban.com/index.php/Api/User/register/";
- // 上传图片
- }
之所以使用静态类以及静态方法,静态属性,是因为可以不需要创建类对象直接调用其方法以及属性。
=================================================================================
【数据库数据操作】:
- /**
- * 用户数据表操作类
- *
- */
- public class Userdb {
- private FinalDb finalDb;
- public Userdb(Context context) {
- finalDb = FinalDb.create(context, ConfigField.Db.DBNAME);
- }
- public boolean isLogin()
- {
- try {
- List<User>list=finalDb.findAll(User.class);
- ConfigField.Flag.setMy(list.get(0));
- if(list.size()>0)
- return true;
- } catch (Exception e) {
- // TODO: handle exception
- }
- return false;
- }
- //用户登录,将用户信息写入数据库
- public void put_in_db(int id)
- {
- try {
- List<User>list=finalDb.findAllByWhere(User.class, "user_id="+id);
- if(list.size()==0)
- {
- User user=new User();
- user.setUser_id(id);
- addOne(user);
- list.add(user);
- }
- ConfigField.Flag.setMy(list.get(0));
- } catch (Exception e) {
- Log.i("Main", e.toString());
- }
- }
- public void clear() {
- finalDb.deleteAll(User.class);
- }
- public List<User> getAll() {
- return finalDb.findAll(User.class);
- }
- /**
- * 批量添加用户信息
- *
- * @param list
- */
- public void add(List<User> list) {
- for (int i = 0; i < list.size(); i++) {
- User user = list.get(i);
- finalDb.save(user);
- }
- }
- /**
- * 批量更新用户信息
- *
- * @param list
- */
- public void update(List<User> list) {
- clear();
- for (int i = 0; i < list.size(); i++) {
- User user = list.get(i);
- finalDb.save(user);
- }
- }
- public void addOne(User user) {
- finalDb.save(user);
- }
- public void update(User user) {
- clear();
- finalDb.save(user);
- }
- }
=================================================================================
【总结】:
这一接比较重要的不是demo而是建立一个登录注册系统的概念,如何设置类,接口,以及上传服务器标准格式,分类也要清楚,工程下面创立几个包
什么样的数据放在哪里,不仅自己一目了然,对于项目的二次开发,以及代码重用,小伙伴交接带来很好地作用,以前小编也是图方便全部写在一个包里,速度是快,看起来很难受,交接给小伙伴光讲述的时间就远远超过自己分类时间啦,所以这几届课也是强迫自己去学会更专业的建立工程,做作为基础的登录注册,简单的登录注册绝对不简单,很多小细节的注意判断都要很多行代码以及类,需要细心分析如何分配调用更加方便,本节课需要注意的知识点:1.afinal框架的使用 2.Ajaxcallback 回调函数的理解 3.服务器上传知识Json解析,数据库使用。
下节课将会讲述登录界面,相比注册而言,要简单很多,相信有了这节课的基础,下节课理解起来也会容易很多,大家跟我一起加油!!!
- Android登录界面之用户数据保存+服务器上传
- Android学习之保存用户登录信息
- Android 用户登录界面
- android---数据保存之SQLite(实现登录用户信息保存
- Android-数据储存:用户登录界面(存储)
- Android数据读写之用户登录
- android 保存用户登录账号
- java之用户登录界面
- Android-UI:用户登录界面
- 用户体验之保存用户登录信息
- 网络:登录界面搭建与数据保存
- Android之数据上传tomcat服务器
- Android 之登录界面
- Android之登录界面
- Android实例demo6之界面登录、sharedperference、自动登录、保存密码
- Android-SharedPreferences保存登录数据
- 服务器控件之用户登录
- 用户登录之SharedPreferences保存用户名
- django获取表单数据方法
- 激活函数之tanh
- tomcat简图
- JS基础语法
- 解决Raphael首页球体做不出来的问题
- Android登录界面之用户数据保存+服务器上传
- 多网卡在同一网段内的问题
- android自定义控件并添加属性的方法以及示例
- Json转Avro
- Angularjs中ng-select和ng-options的用法详解
- angular.js 国际化模块 angular-translate 简单方便快捷翻译中英文等多语言环境
- leetcode_64. Minimum Path Sum
- 你真的了解head标签下的meta?
- 修改EhCacheManagerFactoryBean支持多ehcache.xml配置以及占位符