【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能

马肤

温馨提示:这篇文章已超过469天没有更新,请注意相关的内容是否还可用!

摘要:本教程介绍了如何使用Android Studio和Bmob后端云进行安卓应用开发。通过结合这两个工具,开发者可以实现注册、登录账号功能,密码找回机制,意见反馈系统以及数据可视化。该开发流程简化了开发过程,提高了开发效率,使得创建具有基本用户管理和数据展示功能的安卓应用变得更为容易。

目录

前言

概览

Bmob后端云介绍

Bmob后端云与Android Studio配置

一、Bmob后端云

 二、Android Studio配置

工具类

一、User类

二、Suit类

三、Code类

实现类

 一、登录代码

 二、注册代码

 三、找回密码代码

 四、想法反馈代码


前言

        本项目尚在开发阶段,主要针对的是安卓用户,通过查阅开发文档以及借鉴其他博主,由于是个人开发,可能会在逻辑会有所缺漏,欢迎各位安卓使用者与开发者进行内测并提交反馈意见给我,进行探讨顺便带带我;

        本项目开发主题尚未决定,故本期向各位征集意见,可以通过安装该app进行注册登录,并写下您的想法提交反馈给我,后续将对收集的idea进行整合并决定方向,进行下一步的开发。

        ps:保证无病毒与无信息泄露!!!欢迎大家参与

源代码:

链接:https://pan.baidu.com/s/10ECb54ne_9bubuCLWLB-Kw?pwd=v2sh 

提取码:v2sh

安卓手机软件安装包:

链接:https://pan.baidu.com/s/1a2H5CKxKvtAjvnyOHvybUQ?pwd=np3w 

提取码:np3w


概览

        本期主要用到两个工具,Android Studio和Bmob后端云(后续介绍),在安卓客户端注册登陆并提交想法,最终在Bmob后端云中实现数据可视化,主要实现效果如下图所示

  • Android Studio

    【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第1张

    • Bmob后端云

      【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第2张

               Android Studio在此不做介绍了,以下是对Bmob后端云的介绍

      Bmob后端云介绍

              本次采用Bmob后端云(Bmob后端云 (bmobapp.com))主要是其集成了数据库与服务器,对于很多Android/ios/wp个人移动开发者来说,开发一个具有网络功能的应用不是一件容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务器开发语言,每开发一款移动应用程序,就必须开发维护对应的服务器程序,鉴于此我目前水平有限,故先采用Bmob后端云进行开发,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。


      Bmob后端云与Android Studio配置

      一、Bmob后端云

      • 官网注册账号 (Bmob后端云 (bmobapp.com))

        【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第3张

        • 创建应用

          【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第4张

          • 创建表单,默认有一个_User表单(不用管),要新建一个User表单(名称要与后边安卓代码相同),数据将会在这个表单呈现

            【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第5张

            •  获取key秘钥,后边需要用

              【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第6张

               二、Android Studio配置

              •  AndroidManifest.xml:

                        1、添加网络权限

                【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第7张

                        在上图位置添加下方代码以添加网络权限

                
                
                
                
                
                
                
                
                
                
                

                        2、连接Bmob

                【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第8张

                         在上图位置添加下方代码,并将蓝色方框中的代码替换成红色箭头所指的自己代码的包名

                 
                •  在Activity中对Bmob进行初始化,在OnCreat方法中添加下方代码并将你的应用ID替换成上方Bmob配置时获取的key密钥

                  【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第9张

                  Bmob.initialize(this,"你的应用ID");
                  • 在build.gradle(Module:app)中添加包

                    【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第10张

                    implementation 'io.github.bmob:android-sdk:3.9.4'
                    implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
                    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
                    implementation 'com.squareup.okhttp3:okhttp:4.8.1'
                    implementation 'com.squareup.okio:okio:2.2.2'
                    implementation 'com.google.code.gson:gson:2.8.5'

                            至此,配置已全部完成,接下来是进行界面设计与逻辑代码编写环节


                    工具类

                    一、User类

                            这个工具类的名称与前边在Bmob创建的表单名称相同,这个类继承于BmobObject,其属性相当于在表中的数据。

                    package com.example.application.tool;
                    import java.io.Serializable;
                    import cn.bmob.v3.BmobObject;
                    public class User extends BmobObject implements Serializable {
                        private String Acctount;//手机账户
                        private String Password;//密码
                        private String Context;//反馈内容
                        public String getAcctount() {
                            return Acctount;
                        }
                        public void setAcctount(String acctount) {
                            Acctount = acctount;
                        }
                        public String getPassword() {
                            return Password;
                        }
                        public void setPassword(String password) {
                            Password = password;
                        }
                        public String getContext() {
                            return Context;
                        }
                        public void setContext(String context) {
                            Context = context;
                        }
                    }
                    

                    二、Suit类

                            这个类主要是号码检测(是否符合格式)与密码检测(至少包含3个字母)

                    package com.example.application.tool;
                    import java.util.regex.Matcher;
                    import java.util.regex.Pattern;
                    public class Suit {
                        //手机号码检测
                        public static boolean PhoneSuit(String phone){
                            String ChineseMainland = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[3,5,6,7,8])" + "|(18[0-9])|(19[8,9]))\d{8}$";
                            String HongKong = "^(5|6|8|9)\d{7}$";
                            Matcher C = Pattern.compile(ChineseMainland).matcher(phone);
                            Matcher H = Pattern.compile(HongKong).matcher(phone);
                            return C.matches() || H.matches();
                        }
                        //密码检测(最少3个字母)
                        public static boolean PasswordSuit(String password){
                            char[] s = password.toCharArray();
                            int count = 0 ;
                            //检测所有的密码中有多少个字母
                            for (int i = 0;i = 'a' && s[i] = 'A' && s[i] = 3){
                                return true;
                            }else {
                                return false;
                            }
                        }
                    }
                    

                    三、Code类

                            这个类主要是生成验证码图片,由于目前短信验证在资源上有数量限制,故采用验证码图片进行验证,在实现类中通过创建类对象调用类方法实现对验证码图片的生成。

                    package com.example.application.tool;
                    import android.graphics.Bitmap;
                    import android.graphics.Canvas;
                    import android.graphics.Color;
                    import android.graphics.Paint;
                    import java.util.Random;
                    public class Code {
                        //随机数数组
                        private static final char[] CHARS = {
                                '2', '3', '4', '5', '6', '7', '8', '9',
                                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm',
                                'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
                                'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
                        };
                        private static Code bmpCode;
                        public static Code getInstance() {
                            if(bmpCode == null)
                                bmpCode = new Code();
                            return bmpCode;
                        }
                        //default settings
                        //验证码默认随机数的个数
                        private static final int DEFAULT_CODE_LENGTH = 4;
                        //默认字体大小
                        private static final int DEFAULT_FONT_SIZE = 25;
                        //默认线条的条数
                        private static final int DEFAULT_LINE_NUMBER = 5;
                        //padding值
                        private static final int BASE_PADDING_LEFT = 10, RANGE_PADDING_LEFT = 15, BASE_PADDING_TOP = 15, RANGE_PADDING_TOP = 20;
                        //验证码的默认宽高
                        private static final int DEFAULT_WIDTH = 100, DEFAULT_HEIGHT = 40;
                        //settings decided by the layout xml
                        //canvas width and height
                        private int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;
                        //random word space and pading_top
                        private int base_padding_left = BASE_PADDING_LEFT, range_padding_left = RANGE_PADDING_LEFT,
                                base_padding_top = BASE_PADDING_TOP, range_padding_top = RANGE_PADDING_TOP;
                        //number of chars, lines; font size
                        private int codeLength = DEFAULT_CODE_LENGTH, line_number = DEFAULT_LINE_NUMBER, font_size = DEFAULT_FONT_SIZE;
                        //variables
                        private String code;
                        private int padding_left, padding_top;
                        private Random random = new Random();
                        //验证码图片
                        public Bitmap createBitmap() {
                            padding_left = 0;
                            Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                            Canvas c = new Canvas(bp);
                            code = createCode();
                            c.drawColor(Color.WHITE);
                            Paint paint = new Paint();
                            paint.setAntiAlias(true);
                            paint.setTextSize(font_size);
                            //画验证码
                            for (int i = 0; i  
                    

                    实现类

                    【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第11张

                     一、登录代码

                    •  布局代码

                      【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第12张

                      
                          
                              
                              
                          
                          
                              
                              
                              
                              
                          
                          
                              
                              
                              
                              
                          
                          
                          
                          
                              
                              
                              
                              
                          
                      
                      •  实现代码
                        package com.example.application.activity;
                        import androidx.appcompat.app.AppCompatActivity;
                        import android.content.Intent;
                        import android.os.Bundle;
                        import android.text.TextUtils;
                        import android.view.View;
                        import android.widget.EditText;
                        import android.widget.TextView;
                        import android.widget.Toast;
                        import com.example.application.R;
                        import com.example.application.tool.User;
                        import java.util.List;
                        import cn.bmob.v3.Bmob;
                        import cn.bmob.v3.BmobQuery;
                        import cn.bmob.v3.exception.BmobException;
                        import cn.bmob.v3.listener.FindListener;
                        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
                            private EditText login_phone;//输入收集号码
                            private EditText login_password;//输入密码
                            private TextView login;//登陆按钮
                            private TextView login_lose;//忘记密码
                            private TextView login_resgister;//注册账号
                            private String phone;
                            private String password;
                            @Override
                            protected void onCreate(Bundle savedInstanceState) {
                                super.onCreate(savedInstanceState);
                                setContentView(R.layout.activity_main);
                                Bmob.initialize(this,"ebb1d24c01600c55b1e8be7f2625d7a7");
                                initView();
                            }
                            //初始化控件
                            private void initView() {
                                login_phone = findViewById(R.id.Login_Phone);
                                login_password = findViewById(R.id.Login_Password);
                                login = findViewById(R.id.Login);
                                login_lose = findViewById(R.id.Login_Lose);
                                login_resgister = findViewById(R.id.Login_Resgister);
                                //启动监听事件
                                login.setOnClickListener(this);
                                login_lose.setOnClickListener(this);
                                login_resgister.setOnClickListener(this);
                            }
                            //点击事件
                            @Override
                            public void onClick(View view) {
                                //添加意图,切换画面
                                Intent intent = new Intent();
                                //选择监听按钮触发机制
                                switch (view.getId()){
                                    case R.id.Login:
                                        Getdata();
                                        //没有输入号码、密码判断为空则弹窗提示
                                        if (TextUtils.isEmpty(phone)){
                                            Toast.makeText(this,"请输入手机号码",Toast.LENGTH_SHORT).show();
                                        } else if (TextUtils.isEmpty(password)) {
                                            Toast.makeText(this,"请输入密码",Toast.LENGTH_SHORT).show();
                                        } else {
                                            BmobQuery bmobQuery = new BmobQuery();
                                            bmobQuery.findObjects(new FindListener() {
                                                @Override
                                                public void done(List object, BmobException e) {
                                                    //如果没有异常的话进行查询列表账号
                                                    if(e == null){
                                                        int count = 0;//计数
                                                        //遍历
                                                        for (User user : object) {
                                                            //查询到与客户端输入的账号一致
                                                            if (user.getAcctount().equals(phone)){
                                                                //查询到与客户端输入的密码一致
                                                                if (user.getPassword().equals(password)){
                                                                    intent.setClass(getApplicationContext(),First_interface.class);
                                                                    //传递对象,方便主界面获取到用户信息
                                                                    intent.putExtra("User",user);
                                                                    startActivity(intent);
                                                                    Toast.makeText(getApplicationContext(),"登陆成功",Toast.LENGTH_SHORT).show();
                                                                    break;
                                                                }else {
                                                                    Toast.makeText(getApplicationContext(),"密码错误",Toast.LENGTH_SHORT).show();
                                                                }
                                                            }
                                                            count++;
                                                        }
                                                        //遍历没有查询到,此时count++到object的数量
                                                        if (count >= object.size()){
                                                            Toast.makeText(getApplicationContext(),"账号不存在",Toast.LENGTH_SHORT).show();
                                                        }
                                                    } else {
                                                        Toast.makeText(getApplicationContext(),"账号不存在",Toast.LENGTH_SHORT).show();
                                                    }
                                                }
                                            });
                                        }
                                        break;
                                    case R.id.Login_Lose:
                                        intent.setClass(getApplicationContext(),Findpassword.class);
                                        startActivity(intent);
                                        break;
                                    case R.id.Login_Resgister:
                                        intent.setClass(getApplicationContext(),Resgister.class);
                                        startActivity(intent);
                                        break;
                                }
                            }
                            
                            //获取输入的号码与密码
                            public void Getdata(){
                                phone = login_phone.getText().toString().trim();
                                password = login_password.getText().toString().trim();
                            }
                        }

                         二、注册代码

                        • 布局代码

                          【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第13张

                          
                              
                                  
                                  
                              
                              
                                  
                                  
                                  
                                  
                              
                              
                                  
                                  
                                  
                                  
                              
                              
                                  
                                  
                                  
                                  
                                  
                                  
                              
                              
                              
                              
                          
                          •  实现代码
                            package com.example.application.activity;
                            import androidx.appcompat.app.AppCompatActivity;
                            import android.os.Bundle;
                            import android.text.TextUtils;
                            import android.util.Log;
                            import android.view.View;
                            import android.widget.EditText;
                            import android.widget.ImageView;
                            import android.widget.TextView;
                            import android.widget.Toast;
                            import com.example.application.R;
                            import com.example.application.tool.Code;
                            import com.example.application.tool.Suit;
                            import com.example.application.tool.User;
                            import java.util.List;
                            import cn.bmob.v3.Bmob;
                            import cn.bmob.v3.BmobQuery;
                            import cn.bmob.v3.exception.BmobException;
                            import cn.bmob.v3.listener.FindListener;
                            import cn.bmob.v3.listener.SaveListener;
                            public class Resgister extends AppCompatActivity implements View.OnClickListener {
                                private static final String TAG = null;
                                private EditText register_phone;//获取注册的手机号码
                                private EditText register_password;//获取注册的密码
                                private EditText register_sms;//输入验证码
                                private TextView register;//注册
                                private TextView login_back;//返回登陆
                                private ImageView register_paint;//获取验证码
                                private String phone;//客户端输入的手机号码
                                private String passeword;//客户端输入的密码
                                private String sms;//客户端输入的验证码
                                private String realCode;//图形验证码
                                @Override
                                protected void onCreate(Bundle savedInstanceState) {
                                    super.onCreate(savedInstanceState);
                                    setContentView(R.layout.activity_resgister);
                                    Bmob.initialize(this,"ebb1d24c01600c55b1e8be7f2625d7a7");
                                    initView();
                                }
                                //初始化控件
                                private void initView() {
                                    //获取控件变量
                                    register_phone = findViewById(R.id.Register_Phone);
                                    register_password = findViewById(R.id.Register_Password);
                                    register_sms = findViewById(R.id.Register_SMS);
                                    register = findViewById(R.id.Register);
                                    login_back = findViewById(R.id.Login_Back);
                                    register_paint = findViewById(R.id.Register_Paint);
                                    //启动监听机制
                                    //将验证码用图片的形式显示出来
                                    register_paint.setImageBitmap(Code.getInstance().createBitmap());
                                    realCode = Code.getInstance().getCode().toLowerCase();
                                    register_paint.setOnClickListener(this);
                                    register.setOnClickListener(this);
                                    login_back.setOnClickListener(this);
                                }
                                //获取数据
                                public void Getdata(){
                                    phone = register_phone.getText().toString().trim();
                                    passeword = register_password.getText().toString().trim();
                                    sms = register_sms.getText().toString().toLowerCase();
                                }
                                @Override
                                public void onClick(View view) {
                                    switch (view.getId()){
                                        case R.id.Register_Paint:
                                            register_paint.setImageBitmap(Code.getInstance().createBitmap());
                                            realCode = Code.getInstance().getCode().toLowerCase();
                                            Log.v(TAG,"realCode"+realCode);
                                            break;
                                        case R.id.Login_Back:
                                            finish();
                                            break;
                                        case R.id.Register:
                                            Getdata();
                                            //输入限制条件:不能为空、号码以及密码符合格式、密码数量限制条件:6到16
                                            if (TextUtils.isEmpty(phone)){
                                                Toast.makeText(getApplicationContext(),"请输入手机号码",Toast.LENGTH_SHORT).show();
                                            } else if (TextUtils.isEmpty(passeword)) {
                                                Toast.makeText(getApplicationContext(),"请输入密码",Toast.LENGTH_SHORT).show();
                                            } else if (TextUtils.isEmpty(sms)) {
                                                Toast.makeText(getApplicationContext(),"请输入验证码",Toast.LENGTH_SHORT).show();
                                            } else if (Suit.PhoneSuit(phone.trim()) != true) {
                                                Toast.makeText(getApplicationContext(),"请输入正确的手机号码",Toast.LENGTH_SHORT).show();
                                            } else if (Suit.PasswordSuit(passeword.trim()) != true) {
                                                Toast.makeText(getApplicationContext(),"密码最少包含3个字母",Toast.LENGTH_SHORT).show();
                                            } else if (passeword.length()  16) {
                                                Toast.makeText(getApplicationContext(),"密码不得多于16位数",Toast.LENGTH_SHORT).show();
                                            }else {
                                                BmobQuery bmobQuery = new BmobQuery();
                                                bmobQuery.findObjects(new FindListener() {
                                                    @Override
                                                    public void done(List object, BmobException e) {
                                                        if (e == null){
                                                            int count = 0;//判断是否查询到尾--遍历
                                                            //查询判断用户是否已经存在
                                                            for (User user : object){
                                                                if (user.getAcctount().equals(phone)){
                                                                    register_phone.setText("");
                                                                    Toast.makeText(getApplicationContext(),"该用户已经注册过",Toast.LENGTH_SHORT).show();
                                                                    finish();
                                                                    break;
                                                                }
                                                                count++;
                                                            }
                                                            //查询到尾没有
                                                            if (count == object.size()){
                                                                //判断验证码是否正确
                                                                if (sms.equals(realCode)) {
                                                                    Toast.makeText(getApplicationContext(),  "验证码正确", Toast.LENGTH_SHORT).show();
                                                                    //将用户信息存入bmob云端
                                                                    final User user = new User();
                                                                    user.setAcctount(phone);
                                                                    user.setPassword(passeword);
                                                                    user.save(new SaveListener() {
                                                                        @Override
                                                                        public void done(String s, BmobException e) {
                             if (e == null){
                                 Toast.makeText(getApplicationContext(),"注册成功",Toast.LENGTH_SHORT).show();
                                 finish();
                             }else {
                                 Toast.makeText(getApplicationContext(),"注册失败",Toast.LENGTH_SHORT).show();
                             }
                                                                        }
                                                                    });
                                                                } else {
                                                                    register_sms.setText("");
                                                                    Toast.makeText(getApplicationContext(), "验证码错误", Toast.LENGTH_SHORT).show();
                                                                }
                                                            }
                                                        }else {
                                                            Toast.makeText(Resgister.this, "该用户不存在", Toast.LENGTH_SHORT).show();
                                                        }
                                                    }
                                                });
                                            }
                                            break;
                                    }
                                }
                            }

                             三、找回密码代码

                            • 布局代码

                              【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第14张

                              
                                  
                                      
                                      
                                  
                                  
                                      
                                      
                                      
                                      
                                  
                                  
                                      
                                      
                                      
                                      
                                      
                                      
                                  
                                  
                                      
                                      
                                      
                                      
                                  
                                  
                                  
                                  
                                  
                              
                              •  实现代码
                                package com.example.application.activity;
                                import androidx.appcompat.app.AppCompatActivity;
                                import android.content.Intent;
                                import android.os.Bundle;
                                import android.text.TextUtils;
                                import android.util.Log;
                                import android.view.View;
                                import android.widget.EditText;
                                import android.widget.ImageView;
                                import android.widget.TextView;
                                import android.widget.Toast;
                                import com.example.application.R;
                                import com.example.application.tool.Code;
                                import com.example.application.tool.Suit;
                                import com.example.application.tool.User;
                                import java.util.List;
                                import cn.bmob.v3.Bmob;
                                import cn.bmob.v3.BmobQuery;
                                import cn.bmob.v3.exception.BmobException;
                                import cn.bmob.v3.listener.FindListener;
                                import cn.bmob.v3.listener.UpdateListener;
                                public class Findpassword extends AppCompatActivity implements View.OnClickListener {
                                    private static final String TAG = null;
                                    private EditText find_phone;//手机号码
                                    private EditText find_sms;//验证码
                                    private EditText find_password;//重设密码
                                    private ImageView find_image;//验证码图片
                                    private TextView findword;//完成
                                    private TextView login_go;//去登陆
                                    private String realCode;
                                    private String phone;
                                    private String sms;
                                    private String password;
                                    @Override
                                    protected void onCreate(Bundle savedInstanceState) {
                                        super.onCreate(savedInstanceState);
                                        setContentView(R.layout.activity_findpassword);
                                        Bmob.initialize(this,"ebb1d24c01600c55b1e8be7f2625d7a7");
                                        initView();
                                    }
                                    //初始化控件
                                    private void initView() {
                                        //控件变量
                                        find_phone = findViewById(R.id.Find_Phone);
                                        find_sms = findViewById(R.id.Find_SMS);
                                        find_password = findViewById(R.id.Find_Password);
                                        find_image = findViewById(R.id.Find_Image);
                                        findword = findViewById(R.id.Findword);
                                        login_go = findViewById(R.id.Login_Go);
                                        //监听机制
                                        find_image.setImageBitmap(Code.getInstance().createBitmap());
                                        realCode = Code.getInstance().getCode().toLowerCase();
                                        find_image.setOnClickListener(this);
                                        findword.setOnClickListener(this);
                                        login_go.setOnClickListener(this);
                                    }
                                    @Override
                                    public void onClick(View view) {
                                        Intent intent = new Intent();
                                        switch (view.getId()){
                                            case R.id.Find_Image:
                                                find_image.setImageBitmap(Code.getInstance().createBitmap());
                                                realCode = Code.getInstance().getCode().toLowerCase();
                                                Log.v(TAG,"realCode"+realCode);
                                                break;
                                            case R.id.Findword:
                                                Getdata();
                                                //判断不能为空
                                                if (TextUtils.isEmpty(phone)){
                                                    Toast.makeText(getApplicationContext(),"请输入手机号码",Toast.LENGTH_SHORT).show();
                                                } else if (TextUtils.isEmpty(password)) {
                                                    Toast.makeText(getApplicationContext(),"请输入密码",Toast.LENGTH_SHORT).show();
                                                } else if (TextUtils.isEmpty(sms)) {
                                                    Toast.makeText(getApplicationContext(),"请输入验证码",Toast.LENGTH_SHORT).show();
                                                } else if (Suit.PhoneSuit(phone.trim()) != true) {
                                                    Toast.makeText(getApplicationContext(),"请输入正确的手机号码",Toast.LENGTH_SHORT).show();
                                                } else if (Suit.PasswordSuit(password.trim()) != true) {
                                                    Toast.makeText(getApplicationContext(),"密码最少包含3个字母",Toast.LENGTH_SHORT).show();
                                                } else if (password.length()  16) {
                                                    Toast.makeText(getApplicationContext(), "密码不得多于16位数", Toast.LENGTH_SHORT).show();
                                                }else {
                                                    BmobQuery bmobQuery = new BmobQuery();
                                                    bmobQuery.findObjects(new FindListener() {
                                                        @Override
                                                        public void done(List object, BmobException e) {
                                                            if (e == null){
                                                                int count = 0;//判断是否查询到尾--遍历
                                                                //查询判断用户是否已经存在
                                                                for (User user : object){
                                                                    if (user.getAcctount().equals(phone)){
                                                                        Toast.makeText(getApplicationContext(),"该用户存在",Toast.LENGTH_SHORT).show();
                                                                        //判断验证码是否正确
                                                                        if (sms.equals(realCode)) {
                                                                            //云端数据更新
                                                                            User user1 = new User();
                                                                            user1.setPassword(password);
                                                                            user1.update(user.getObjectId(), new UpdateListener() {
                                 @Override
                                 public void done(BmobException e) {
                                     if (e == null) {
                                         Toast.makeText(getApplicationContext(),"密码修改成功",Toast.LENGTH_SHORT).show();
                                     }else {
                                         Toast.makeText(getApplicationContext(),"修改失败"+"\n"+"错误代码:"+e.getErrorCode(),Toast.LENGTH_LONG).show();
                                     }
                                 }
                                                                            });
                                                                            finish();
                                                                            break;
                                                                        }else {
                                                                            find_sms.setText("");
                                                                            Toast.makeText(getApplicationContext(), "验证码错误", Toast.LENGTH_SHORT).show();
                                                                        }
                                                                    }
                                                                    count++;
                                                                }
                                                                //查询到尾没有
                                                                if (count >= object.size()){
                                                                    Toast.makeText(getApplicationContext(),"该用户不存在",Toast.LENGTH_SHORT).show();
                                                                }
                                                            }else {
                                                                Toast.makeText(getApplicationContext(),"该用户不存在",Toast.LENGTH_SHORT).show();
                                                            }
                                                        }
                                                    });
                                                }
                                                break;
                                            case R.id.Login_Go:
                                                finish();
                                                break;
                                        }
                                    }
                                    //获取输入的数据
                                    private void Getdata() {
                                        phone = find_phone.getText().toString().trim();
                                        sms = find_sms.getText().toString().toLowerCase();
                                        password = find_password.getText().toString().trim();
                                    }
                                }

                                 四、想法反馈代码

                                • 布局代码

                                  【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化,安卓app开发入门,使用Android Studio与Bmob后端云实现注册登录、密码找回、意见反馈及数据可视化功能 第15张

                                  
                                      
                                      
                                      
                                      
                                  
                                  • 实现代码
                                    package com.example.application.activity;
                                    import androidx.appcompat.app.AppCompatActivity;
                                    import android.content.Intent;
                                    import android.os.Bundle;
                                    import android.view.View;
                                    import android.widget.Button;
                                    import android.widget.EditText;
                                    import android.widget.Toast;
                                    import com.example.application.R;
                                    import com.example.application.tool.User;
                                    import java.util.List;
                                    import cn.bmob.v3.Bmob;
                                    import cn.bmob.v3.BmobQuery;
                                    import cn.bmob.v3.exception.BmobException;
                                    import cn.bmob.v3.listener.FindListener;
                                    import cn.bmob.v3.listener.SaveListener;
                                    import cn.bmob.v3.listener.UpdateListener;
                                    public class First_interface extends AppCompatActivity implements View.OnClickListener {
                                        private EditText idea;//编辑框
                                        private Button submit;//提交按钮
                                        private String context;//编辑框内容
                                        @Override
                                        protected void onCreate(Bundle savedInstanceState) {
                                            super.onCreate(savedInstanceState);
                                            setContentView(R.layout.activity_first_interface);
                                            Bmob.initialize(this,"ebb1d24c01600c55b1e8be7f2625d7a7");
                                            initView();
                                        }
                                        //初始化控件
                                        private void initView() {
                                            //定义控件
                                            idea = findViewById(R.id.Idea);
                                            submit = findViewById(R.id.submit);
                                            //监听
                                            submit.setOnClickListener(this);
                                        }
                                        public void Getdata(){
                                            context = idea.getText().toString().trim();
                                        }
                                        @Override
                                        public void onClick(View view) {
                                            switch (view.getId()){
                                                case R.id.submit:
                                                    Getdata();
                                                    //传递对象
                                                    Intent intent = getIntent();
                                                    User user = (User) intent.getSerializableExtra("User");
                                                    BmobQuery bmobQuery = new BmobQuery();
                                                    bmobQuery.findObjects(new FindListener() {
                                                        @Override
                                                        public void done(List list, BmobException e) {
                                                            if(e == null){
                                                                System.out.println("1");
                                                                for (User user1 : list) {
                                                                    //查询到一样
                                                                    if(user.getAcctount().equals(user1.getAcctount())){
                                                                        //向云端提交数据
                                                                        user1.setContext(context);
                                                                        user1.update(user1.getObjectId(), new UpdateListener() {
                                                                            @Override
                                                                            public void done(BmobException e) {
                                                                                if (e == null){
                                     Toast.makeText(First_interface.this, "提交成功", Toast.LENGTH_SHORT).show();
                                                                                }else {
                                     Toast.makeText(First_interface.this, "提交失败", Toast.LENGTH_SHORT).show();
                                                                                }
                                                                            }
                                                                        });
                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    });
                                                    break;
                                            }
                                        }
                                    }

                                            至此,本期项目已经全部实现,尚有不足之处,后续将继续完善补充,欢迎各位下载试玩!


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码