Android登录界面之用户数据保存+服务器上传

来源:互联网 发布:seo主管工作内容 编辑:程序博客网 时间:2024/06/05 00:33

【界面改动】

根据以往app注册经验,将界面改成以下图所示:


通过app手机验证码的发送来注册,手机短信验证是企业给消费者(用户)的一个凭证,通过手机短信内容的验证码来验证身份。目前使用的最普遍的有各大银行网上银行、网上商城、团购网站、票务公司等。手机短信验证利用短信验证码来注册会员,大大降低了非法注册,烂注册的数据。

=================================================================================

在注册同时,需要检测手机号码是否为手机号格式:

Java代码  
  1. /** 
  2.      *  
  3.      * 判断字符串格式是否为手机号格式 
  4.      *  
  5.      * 处理字符串时去掉首尾空格 判断依据 
  6.      *  
  7.      * java-正则表达式判断手机号 
  8.      *  
  9.      * 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 
  10.      *  
  11.      * 故先要整清楚现在已经开放了多少个号码段,国家号码段分配如下: 
  12.      *  
  13.      * 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188 
  14.      *  
  15.      * 联通:130、131、132、152、155、156、185、186 
  16.      *  
  17.      * 电信:133、153、180、189、(1349卫通) 
  18.      *  
  19.      * @param phone_num 
  20.      * @return true:是 false:不是 
  21.      */  
  22.     public static boolean isPhoneNum(String phone_num) {  
  23.         Pattern p = Pattern  
  24.                 .compile("^((13[0-9])|(15[^4,\\D])|(14[0-9])|(17[0-9])|(18[0-9]))\\d{8}$");  
  25.         Matcher m = p.matcher(phone_num);  
  26.         return m.matches();  
  27.     }  

 ================================================================================

【注册类正式使用】:使用afinal框架,虽然说现在afinal框架好久没有更新了,但是习惯了使用它在没有习惯使用xutil3 时候暂时还没有抛弃打算

Java代码  收藏代码
  1. public class RegisterActivity extends Activity implements OnClickListener{  
  2.     private EditText phone;  
  3.     private TextView getCode;  
  4.     private EditText code;  
  5.     private EditText pwd; // 密码  
  6.     private EditText repwd;  
  7.     private Button login_ok;  
  8.     ProgressBar progressBar;  
  9.     Handler handler;  
  10.   
  11.   
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_register);  
  15.         init();  
  16.         //Activity管理器,负责添加到队列  
  17.         MyActivityManager.addActivity(this);  
  18.         findViewById(R.id.iv_back_of_register).setOnClickListener(this);  
  19.         findViewById(R.id.tv_login).setOnClickListener(this);  
  20.         handler=new Handler(){  
  21.             public void handleMessage(Message msg) {  
  22.                 if (msg.what == 0x1122) {  
  23.                     ConfigUtil.ProgressBarOff(progressBar);  
  24.                     startActivity(new Intent(RegisterActivity.this,  
  25.                             GuideSelect.class));  
  26.                     finish();  
  27.                 }  
  28.             }  
  29.         };  
  30.         login_ok.setOnClickListener(new OnClickListener() {  
  31.               
  32.             @Override  
  33.             public void onClick(View arg0) {  
  34.             if(ConfigUtil.isPhoneNum(phone.getText().toString()))  
  35.                 login_Button();  
  36.             else  
  37.                 Toast.makeText(getApplicationContext(), "手机号码格式不正确"1).show();  
  38.                   
  39.             }  
  40.         });  
  41.           
  42.           
  43.     }  
  44.     /* 
  45.      * 获得组件对象 
  46.      */  
  47.     public void init(){  
  48.         progressBar=(ProgressBar)findViewById(R.id.login_progressBar);  
  49.         phone=(EditText)findViewById(R.id.register_username);  
  50.         getCode=(TextView)findViewById(R.id.getcode);  
  51.         code=(EditText)findViewById(R.id.code);  
  52.         pwd=(EditText)findViewById(R.id.register_password1);  
  53.         repwd=(EditText)findViewById(R.id.register_password2);  
  54.         login_ok=(Button)findViewById(R.id.register_ok_button);  
  55.     }  
  56.     public void login_Button(){  
  57.         if (isUserPwdRight() && isUserRight(phone.getText().toString())) {  
  58.             register(phone.getText().toString(), pwd.getText().toString(), code  
  59.                     .getText().toString(), ConfigField.ServerUrl.RegisterUrl);  
  60.         }  
  61.           
  62.     }  
  63.     /** 
  64.      * 向服务器提交注册数据 
  65.      *  
  66.      * 向服务提交前需保证 1.用户名,密码合法 2.前后输入的密码相同 3.网络连接是否正常 
  67.      *  
  68.      * @param phone 
  69.      *            :用户名 
  70.      * @param userPwd 
  71.      *            :密码 
  72.      * @param code 
  73.      *            :验证码 
  74.      * @param url 
  75.      *            :提交的地址 
  76.      */  
  77.     public void register(String phone,String pwd,String code,String url){  
  78.           
  79.         AjaxParams param=new AjaxParams();  
  80.         param.put("username", phone);  
  81.         String md5pwd=MD5Util.MD5(pwd);  
  82.         param.put("pwd", md5pwd);  
  83.         param.put("code", code);  
  84.         FinalHttp finalhttp=new FinalHttp();  
  85.         finalhttp.post(url, param, new AjaxCallBack<String>() {  
  86.             public void onSuccess(String t){  
  87.                 super.onSuccess(t);  
  88.               
  89.                 try {  
  90.                     JSONObject json=new JSONObject();  
  91.                     JSONObject jsondata=json.getJSONObject("data");  
  92.                     if(jsondata.has("user_id")){  
  93.                         int user_id=Integer.parseInt(jsondata.getString("user_id"));  
  94.                         System.out.println(user_id+"");  
  95.                         ConfigField.Flag.setMyID(user_id);  
  96.                         goToGuideActivity();  
  97.                           
  98.                     }  
  99.                 } catch (JSONException e) {  
  100.                     // TODO Auto-generated catch block  
  101.                     e.printStackTrace();  
  102.                     System.out.println("Wrong is jumping out,you can't submit you logInfo");  
  103.                 }  
  104.                   
  105.             }  
  106.               
  107. /* 
  108.  * 成功后将服务器发起请求,得到用户id,调用数据库,将用户数据存储在数据库中 
  109.  */  
  110.             private void goToGuideActivity() {  
  111.                 // TODO Auto-generated method stub  
  112.                 new Thread(){  
  113.                       
  114.                     public void run(){  
  115.                         FinalHttp finalhttp=new FinalHttp();  
  116.                         int id=ConfigField.Flag.getMyID();  
  117.                         finalhttp.get(ConfigField.ServerUrl.RegisterUrl,new AjaxCallBack<String>(){  
  118.                               
  119.                             public void onSuccess(String t) {  
  120.                                   
  121.                                       
  122.                                     try {  
  123.                                         JSONObject jsonObject = new JSONObject(t);  
  124.                                          User user = new User();  
  125.                                         JSONObject jsonUser=jsonObject.getJSONObject("data");  
  126.                                         user.setUser_id(jsonUser.getInt("user_id"));  
  127.                                         Userdb ud = new Userdb(getApplicationContext());  
  128.                                         ud.clear();  
  129.                                         ud.addOne(user);  
  130.                                         ConfigField.Flag.setMy(user);  
  131.                                         To_MainUI();//跳转主界面  
  132.                                     } catch (JSONException e) {  
  133.                                         // TODO Auto-generated catch block  
  134.                                         e.printStackTrace();  
  135.                                     }  
  136.                                       
  137.                                   
  138.                             }  
  139.                             public void onFailure(Throwable t,  
  140.                                     int errorNo, String strMsg) {  
  141.                                 ConfigUtil.ProgressBarOff(progressBar);  
  142.                                 Toast.makeText(getApplicationContext(), "失败",1).show();  
  143.                             };  
  144.                         });  
  145.                               
  146.                           
  147.                     }  
  148.                       
  149.                 }.start();  
  150.                   
  151.             }  
  152.             public void onFailure(Throwable t, int errorNo, String strMsg){  
  153.                 super.onFailure(t, errorNo, strMsg);  
  154.                 System.out.println("------"+strMsg+"------");  
  155.                 Toast.makeText(getApplicationContext(), "联网失败"1).show();  
  156.             }  
  157.               
  158.         });  
  159.       
  160.           
  161.           
  162.     }  
  163.       
  164.       
  165.   
  166.     @Override  
  167.     public void onClick(View v) {  
  168.         // TODO Auto-generated method stub  
  169.         switch(v.getId()){  
  170.         case R.id.iv_back_of_register:  
  171.             finish();  
  172.             break;  
  173.         case R.id.tv_login:  
  174.             startActivity(new Intent(this,LogInActivity.class));  
  175.             finish();  
  176.             break;  
  177.               
  178.         }  
  179.           
  180.     }  
  181.     /** 
  182.      * 判断用户名是否合法 
  183.      *  
  184.      * @param name 
  185.      * @return 
  186.      */  
  187.     public boolean isUserRight(String phone) {  
  188.         if (phone.equals("")) {  
  189.             www.zhy.nomalutils.ToastUtil.show_text(getApplicationContext(), "电话或姓名不能为空");  
  190.             return false;  
  191.         } else  
  192.             return true;  
  193.     }  
  194.   
  195.     public void To_MainUI() {  
  196.         startActivity(new Intent(RegisterActivity.this, GuideSelect.class));  
  197.         RegisterActivity.this.finish();  
  198.     }  
  199.   
  200.     /** 
  201.      * 判断用户密码是否合法 
  202.      *  
  203.      * @param pwd 
  204.      * @return 
  205.      */  
  206.     public boolean isUserPwdRight() {  
  207.         if (repwd.getText().toString().equals(pwd.getText().toString())  
  208.                 && !pwd.getText().toString().equals(""))  
  209.             return true;  
  210.         else {  
  211.             if (pwd.getText().toString().equals(""))  
  212.                 www.zhy.nomalutils.ToastUtil.show_text(getApplicationContext(), "密码不能为空。");  
  213.             else  
  214.                 www.zhy.nomalutils.ToastUtil.show_text(getApplicationContext(), "两次密码不正确。");  
  215.             return false;  
  216.         }  
  217.     }  
  218.   
  219. }  

 ===============================================================================

【数据库】

以上涉及到数据库代码:

afinal框架创建数据库非常简单方便,具体可以看一下链接:https://github.com/yangfuhai/afinal

首先建立用户User类:

Java代码  收藏代码
  1. public class User implements DataModel {  
  2.     /* 
  3.      * 用户信息封装类 
  4.      */  
  5.   
  6.     @Id(column = "id")  
  7.     private int id;  
  8.     private String name;  
  9.     private String tel;  
  10.       
  11.     public String getStatusInfo() {  
  12.         return statusInfo;  
  13.     }  
  14.   
  15.     private int user_id;  
  16.     private int status;  
  17.   
  18.     public User() {  
  19.         name = "用户";  
  20.           
  21.           
  22.           
  23.     }  
  24.     public int getUser_id() {  
  25.         return user_id;  
  26.     }  
  27.   
  28.     public void setUser_id(int user_id) {  
  29.         this.user_id = user_id;  
  30.     }  
  31.   
  32.       
  33.       
  34.       
  35. }  

 需要注意的一点:

//这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性

刚开始学习的时候忽略掉了,所以导致创建不成功,同时权限问题的添加也需要注意。

================================================================================

【URL】:

专门建立一个静态类来调用URL例如:

Java代码  收藏代码
  1. public static class ServerUrl {  
  2.         // 登录  
  3.         public static final String LoginUrl = "http://kaka.ileban.com/index.php/Api/User/login";  
  4.         // 注册  
  5.         public static final String RegisterUrl = "http://kaka.ileban.com/index.php/Api/User/register/";  
  6.         // 上传图片  
  7.           
  8.     }  

 之所以使用静态类以及静态方法,静态属性,是因为可以不需要创建类对象直接调用其方法以及属性。

=================================================================================

【数据库数据操作】:

Java代码  收藏代码
  1. /** 
  2.  * 用户数据表操作类 
  3.  *  
  4.  */  
  5.   
  6. public class Userdb {  
  7.   
  8.     private FinalDb finalDb;  
  9.   
  10.     public Userdb(Context context) {  
  11.         finalDb = FinalDb.create(context, ConfigField.Db.DBNAME);  
  12.     }  
  13.   
  14.       
  15.     public boolean isLogin()  
  16.     {  
  17.         try {  
  18.             List<User>list=finalDb.findAll(User.class);  
  19.             ConfigField.Flag.setMy(list.get(0));  
  20.             if(list.size()>0)  
  21.                 return true;  
  22.         } catch (Exception e) {  
  23.             // TODO: handle exception  
  24.         }  
  25.          return false;  
  26.     }  
  27.       
  28.   
  29.     //用户登录,将用户信息写入数据库  
  30.     public void put_in_db(int id)  
  31.     {  
  32.         try {  
  33.             List<User>list=finalDb.findAllByWhere(User.class"user_id="+id);  
  34.             if(list.size()==0)  
  35.             {  
  36.                 User user=new User();  
  37.                 user.setUser_id(id);  
  38.                 addOne(user);  
  39.                 list.add(user);  
  40.             }  
  41.             ConfigField.Flag.setMy(list.get(0));  
  42.         } catch (Exception e) {  
  43.             Log.i("Main", e.toString());  
  44.         }  
  45.           
  46.     }  
  47.       
  48.     public void clear() {  
  49.         finalDb.deleteAll(User.class);  
  50.     }  
  51.   
  52.     public List<User> getAll() {  
  53.         return finalDb.findAll(User.class);  
  54.     }  
  55.   
  56.     /** 
  57.      * 批量添加用户信息 
  58.      *  
  59.      * @param list 
  60.      */  
  61.     public void add(List<User> list) {  
  62.         for (int i = 0; i < list.size(); i++) {  
  63.             User user = list.get(i);  
  64.             finalDb.save(user);  
  65.         }  
  66.     }  
  67.   
  68.     /** 
  69.      * 批量更新用户信息 
  70.      *  
  71.      * @param list 
  72.      */  
  73.     public void update(List<User> list) {  
  74.         clear();  
  75.         for (int i = 0; i < list.size(); i++) {  
  76.             User user = list.get(i);  
  77.             finalDb.save(user);  
  78.         }  
  79.     }  
  80.   
  81.     public void addOne(User user) {  
  82.         finalDb.save(user);  
  83.   
  84.     }  
  85.   
  86.     public void update(User user) {  
  87.         clear();  
  88.         finalDb.save(user);  
  89.     }  
  90. }  

 =================================================================================

【总结】:

这一接比较重要的不是demo而是建立一个登录注册系统的概念,如何设置类,接口,以及上传服务器标准格式,分类也要清楚,工程下面创立几个包



 什么样的数据放在哪里,不仅自己一目了然,对于项目的二次开发,以及代码重用,小伙伴交接带来很好地作用,以前小编也是图方便全部写在一个包里,速度是快,看起来很难受,交接给小伙伴光讲述的时间就远远超过自己分类时间啦,所以这几届课也是强迫自己去学会更专业的建立工程,做作为基础的登录注册,简单的登录注册绝对不简单,很多小细节的注意判断都要很多行代码以及类,需要细心分析如何分配调用更加方便,本节课需要注意的知识点:1.afinal框架的使用  2.Ajaxcallback  回调函数的理解  3.服务器上传知识Json解析,数据库使用。

 

下节课将会讲述登录界面,相比注册而言,要简单很多,相信有了这节课的基础,下节课理解起来也会容易很多,大家跟我一起加油!!!

0 0
原创粉丝点击