请选择 进入手机版 | 继续访问电脑版

Android周末 第二周-Bmob实现Android登录注册修改密码

[复制链接]
阿峻 发表于 2021-1-2 17:52:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
Android周末 第二周-Bmob实现Android登录注册和实现Vue图书管理增删改查



1.Android 登录注册修改暗码

Bmob详细先容和使用方法 传送门
1.demo核心代码

1.注册账号

  1. BmobQuery categoryBmobQuery = new BmobQuery();                categoryBmobQuery.addWhereEqualTo("username", mEditText.getText().toString());                categoryBmobQuery.findObjects(new FindListener() {                    @Override                    public void done(List object, BmobException e) {                        if (e == null) {                            if (object.size()!=0){                                // 点击按钮 代表登录乐成                                Toast.makeText(MainActivity2.this, "注册失败,账号已存在"+object.size(), Toast.LENGTH_SHORT).show();                            }else {                                BmobUser user =new BmobUser();                                user.setUsername(mEditText.getText().toString());                                user.setPassword(mEditText2.getText().toString());                                user.signUp(new SaveListener() {                                    @Override                                    public void done(BmobUser user, BmobException e) {                                        if(e==null)                                        {                                            Toast.makeText(MainActivity2.this, "注册乐成!", Toast.LENGTH_SHORT).show();                                            finish();                                        }else                                        {                                            Log.e("注册失败", "原因: ",e );                                        }                                    }                                });                            }                        }                    }                });
复制代码
运行,账号已存在

注册乐成

2.登录账号

  1. //要延时的步调                 String strUsername = mEditText.getText().toString();                String strPassword = mEditText2.getText().toString();                //获取用户输入的账号和暗码                BmobUser userlogin=new BmobUser();                userlogin.setUsername(strUsername);                userlogin.setPassword(strPassword);                userlogin.login(new SaveListener() {                    @Override                    public void done(BmobUser bmobUser, BmobException e) {                        if(e==null){                            // 点击按钮 代表登录乐成                            Intent intent=new Intent(MainActivity.this,MainActivity3.class);                            intent.putExtra("key",mEditText.getText().toString());                            startActivity(intent);                            finish();                            Toast.makeText(MainActivity.this,"登录乐成",Toast.LENGTH_SHORT).show();                        }else {                            recovery();                            Toast.makeText(MainActivity.this,"账号或暗码错误!",Toast.LENGTH_SHORT).show();                            Log.e("登录失败", "原因: ", e);                        }                    }                });
复制代码
运行,登录失败

登录乐成

3.修改暗码

  1.                                         //新暗码                String newPwd = mEditText2.getText().toString();                //旧暗码                String oldPwd = mEditText.getText().toString();                BmobUser.updateCurrentUserPassword(oldPwd, newPwd, new UpdateListener() {                    @Override                    public void done(BmobException e) {                        if (e == null) {                            Toast.makeText(MainActivity4.this, "修改乐成", Toast.LENGTH_LONG).show();                            finish();                        } else {                            Toast.makeText(MainActivity4.this, "修改失败:" + e.getMessage(),Toast.LENGTH_LONG).show();                        }                    }                });
复制代码
运行,修改乐成

再次登录

2.全部代码

第一步,添加Bmob依赖

  1. //bmob所需依赖    implementation 'cn.bmob.android:bmob-sdk:3.7.8'    implementation "io.reactivex.rxjava2:rxjava:2.2.20"    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'    implementation 'com.squareup.okhttp3:okhttp:3.14.1'    implementation 'com.squareup.okio:okio:2.2.2'    implementation 'com.google.code.gson:gson:2.8.5'
复制代码
第二步,添加权限和相关设置


权限
  1.                               
复制代码
允许http请求
  1.    android:usesCleartextTraffic="true"
复制代码
application初始化

Myapplication
  1. public class Myapplication  extends Application {    @Override    public void onCreate() {        super.onCreate();        //提供以下两种方式举行初始化操纵:        //第一:默认初始化        Bmob.initialize(this, "179b1e34569243c3379fee764060ef0c");        // 注:自v3.5.2开始,数据sdk内部缝合了统计sdk,开辟者无需额外集成,传渠道参数即可,不传默认没开启数据统计功能        //Bmob.initialize(this, "Your Application ID","bmob");        //第二:自v3.4.7版本开始,设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的巨细、文件的逾期时间(单元为秒),        //BmobConfig config =new BmobConfig.Builder(this)        设置appkey        //.setApplicationId("Your Application ID")        请求超时时间(单元为秒):默认15s        //.setConnectTimeout(30)        文件分片上传时每片的巨细(单元字节),默认512*1024        //.setUploadBlockSize(1024*1024)        文件的逾期时间(单元为秒):默认1800s        //.setFileExpiration(2500)        //.build();        //Bmob.initialize(config);    }}
复制代码
Person实体类

  1. public class Person extends BmobObject {    private String name;    private String address;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}
复制代码
activity_main.xml代码

登录主界面
  1.                                                                     
复制代码
input_layout.xml

  1.                                                                                                 
复制代码
layout_progress.xml

  1.                
复制代码
title_layout.xml

  1.    
复制代码
圆形图片CircleImageView

  1. import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import androidx.annotation.Nullable;public class CircleImageView extends androidx.appcompat.widget.AppCompatImageView {    //画笔    private Paint mPaint;    //圆形图片的半径    private int mRadius;    //图片的宿放比例    private float mScale;    public CircleImageView(Context context) {        super(context);    }    public CircleImageView(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);    }    public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        //由于是圆形,宽高应保持一致        int size = Math.min(getMeasuredWidth(), getMeasuredHeight());        mRadius = size / 2;        setMeasuredDimension(size, size);    }    @SuppressLint("DrawAllocation")    @Override    protected void onDraw(Canvas canvas) {        mPaint = new Paint();        Drawable drawable = getDrawable();        if (null != drawable) {            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();            //初始化BitmapShader,传入bitmap对象            BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);            //盘算缩放比例            mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());            Matrix matrix = new Matrix();            matrix.setScale(mScale, mScale);            bitmapShader.setLocalMatrix(matrix);            mPaint.setShader(bitmapShader);            //画圆形,指定好坐标,半径,画笔            canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);        } else {            super.onDraw(canvas);        }    }}
复制代码
MainActivity代码

  1. public class MainActivity extends Activity implements View.OnClickListener {    private TextView mBtnLogin,mTextView;    private View progress;    private View mInputLayout;    private float mWidth, mHeight;    private LinearLayout mName, mPsw;    EditText mEditText,mEditText2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (Build.VERSION.SDK_INT >= 21){            View decorView = getWindow().getDecorView();            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        setContentView(R.layout.activity_main);        initView();        mTextView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent(MainActivity.this,MainActivity2.class);                startActivity(intent);            }        });    }    private void initView() {        mBtnLogin = (TextView) findViewById(R.id.main_btn_login);        progress = findViewById(R.id.layout_progress);        mInputLayout = findViewById(R.id.input_layout);        mName = (LinearLayout) findViewById(R.id.input_layout_name);        mPsw = (LinearLayout) findViewById(R.id.input_layout_psw);        mTextView=findViewById(R.id.zhuce);        mBtnLogin.setOnClickListener(this);        mEditText=findViewById(R.id.user);        mEditText2=findViewById(R.id.key);    }    @Override    public void onClick(View v) {        // 盘算出控件的高与宽        mWidth = mBtnLogin.getMeasuredWidth();        mHeight = mBtnLogin.getMeasuredHeight();        // 隐藏输入框        mName.setVisibility(View.INVISIBLE);        mPsw.setVisibility(View.INVISIBLE);        inputAnimator(mInputLayout, mWidth, mHeight);        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                //要延时的步调                 String strUsername = mEditText.getText().toString();                String strPassword = mEditText2.getText().toString();                //获取用户输入的账号和暗码                BmobUser userlogin=new BmobUser();                userlogin.setUsername(strUsername);                userlogin.setPassword(strPassword);                userlogin.login(new SaveListener() {                    @Override                    public void done(BmobUser bmobUser, BmobException e) {                        if(e==null){                            // 点击按钮 代表登录乐成                            Intent intent=new Intent(MainActivity.this,MainActivity3.class);                            intent.putExtra("key",mEditText.getText().toString());                            startActivity(intent);                            finish();                            Toast.makeText(MainActivity.this,"登录乐成",Toast.LENGTH_SHORT).show();                        }else {                            recovery();                            Toast.makeText(MainActivity.this,"账号或暗码错误!",Toast.LENGTH_SHORT).show();                            Log.e("登录失败", "原因: ", e);                        }                    }                });            }        },3000); //8000为毫秒单元    }    /**     * 输入框的动画效果     *     * @param view     *            控件     * @param w     *            宽     * @param h     *            高     */    private void inputAnimator(final View view, float w, float h) {        AnimatorSet set = new AnimatorSet();        ValueAnimator animator = ValueAnimator.ofFloat(0, w);        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                float value = (Float) animation.getAnimatedValue();                ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view                        .getLayoutParams();                params.leftMargin = (int) value;                params.rightMargin = (int) value;                view.setLayoutParams(params);            }        });        ObjectAnimator animator2 = ObjectAnimator.ofFloat(mInputLayout,                "scaleX", 1f, 0.5f);        set.setDuration(1000);        set.setInterpolator(new AccelerateDecelerateInterpolator());        set.playTogether(animator, animator2);        set.start();        set.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {            }            @Override            public void onAnimationRepeat(Animator animation) {            }            @Override            public void onAnimationEnd(Animator animation) {                /**                 * 动画竣事后,先显示加载的动画,然后再隐藏输入框                 */                progress.setVisibility(View.VISIBLE);                progressAnimator(progress);                mInputLayout.setVisibility(View.INVISIBLE);            }            @Override            public void onAnimationCancel(Animator animation) {            }        });    }    /**     * 出现进度动画     *     * @param view     */    private void progressAnimator(final View view) {        PropertyValuesHolder animator = PropertyValuesHolder.ofFloat("scaleX",                0.5f, 1f);        PropertyValuesHolder animator2 = PropertyValuesHolder.ofFloat("scaleY",                0.5f, 1f);        ObjectAnimator animator3 = ObjectAnimator.ofPropertyValuesHolder(view,                animator, animator2);        animator3.setDuration(1000);        animator3.setInterpolator(new JellyInterpolator());        animator3.start();    }    public class JellyInterpolator extends LinearInterpolator {        private float factor;        public JellyInterpolator() {            this.factor = 0.15f;        }        @Override        public float getInterpolation(float input) {            return (float) (Math.pow(2, -10 * input)                    * Math.sin((input - factor / 4) * (2 * Math.PI) / factor) + 1);        }    }    /**     * 规复初始状态     */    private void recovery() {        progress.setVisibility(View.GONE);        mInputLayout.setVisibility(View.VISIBLE);        mName.setVisibility(View.VISIBLE);        mPsw.setVisibility(View.VISIBLE);        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mInputLayout.getLayoutParams();        params.leftMargin = 0;        params.rightMargin = 0;        mInputLayout.setLayoutParams(params);        ObjectAnimator animator2 = ObjectAnimator.ofFloat(mInputLayout, "scaleX", 0.5f,1f );        animator2.setDuration(500);        animator2.setInterpolator(new AccelerateDecelerateInterpolator());        animator2.start();    }}
复制代码
activity_main2.xml代码

注册主界面
  1.                                                                                                             
复制代码
MainActivity2代码

  1. public class MainActivity2 extends AppCompatActivity {    EditText mEditText,mEditText2;    TextView mTextView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (Build.VERSION.SDK_INT >= 21){            View decorView = getWindow().getDecorView();            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        setContentView(R.layout.activity_main2);        mEditText=findViewById(R.id.user);        mEditText2=findViewById(R.id.key);        mTextView=findViewById(R.id.main_btn_login);        mTextView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                BmobQuery categoryBmobQuery = new BmobQuery();                categoryBmobQuery.addWhereEqualTo("username", mEditText.getText().toString());                categoryBmobQuery.findObjects(new FindListener() {                    @Override                    public void done(List object, BmobException e) {                        if (e == null) {                            if (object.size()!=0){                                // 点击按钮 代表登录乐成                                Toast.makeText(MainActivity2.this, "注册失败,账号已存在"+object.size(), Toast.LENGTH_SHORT).show();                            }else {                                BmobUser user =new BmobUser();                                user.setUsername(mEditText.getText().toString());                                user.setPassword(mEditText2.getText().toString());                                user.signUp(new SaveListener() {                                    @Override                                    public void done(BmobUser user, BmobException e) {                                        if(e==null)                                        {                                            Toast.makeText(MainActivity2.this, "注册乐成!", Toast.LENGTH_SHORT).show();                                            finish();                                        }else                                        {                                            Log.e("注册失败", "原因: ",e );                                        }                                    }                                });                            }                        }                    }                });                    }        });    }}
复制代码
activity_main3.xml

登录乐成界面
  1.             
复制代码
MainActivity3

  1. public class MainActivity3 extends AppCompatActivity {    TextView mTextView,mTextView2,mTextView3;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (Build.VERSION.SDK_INT >= 21){            View decorView = getWindow().getDecorView();            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        setContentView(R.layout.activity_main3);        mTextView=findViewById(R.id.main_btn_login);        mTextView2=findViewById(R.id.textView);        mTextView3=findViewById(R.id.tuichu);        mTextView3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent(MainActivity3.this,MainActivity.class);                startActivity(intent);                finish();            }        });        String s = getIntent().getStringExtra("key");        mTextView2.setText("欢迎你  "+s);        mTextView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent=new Intent(MainActivity3.this,MainActivity4.class);                intent.putExtra("key",s);                startActivity(intent);            }        });    }}
复制代码
activity_main4.xml

修改暗码界面
  1.                                                                                                                                                    
复制代码
MainActivity4

  1. public class MainActivity4 extends AppCompatActivity {    TextView mTextView,mTextView2;    EditText mEditText,mEditText2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (Build.VERSION.SDK_INT >= 21){            View decorView = getWindow().getDecorView();            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        setContentView(R.layout.activity_main4);        mTextView=findViewById(R.id.user);        mEditText=findViewById(R.id.key1);        mEditText2=findViewById(R.id.key);        mTextView2=findViewById(R.id.main_btn_login);        String s = getIntent().getStringExtra("key");        mTextView.setText(s);        mTextView2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //新暗码                String newPwd = mEditText2.getText().toString();                //旧暗码                String oldPwd = mEditText.getText().toString();                BmobUser.updateCurrentUserPassword(oldPwd, newPwd, new UpdateListener() {                    @Override                    public void done(BmobException e) {                        if (e == null) {                            Toast.makeText(MainActivity4.this, "修改乐成", Toast.LENGTH_LONG).show();                            finish();                        } else {                            Toast.makeText(MainActivity4.this, "修改失败:" + e.getMessage(),Toast.LENGTH_LONG).show();                        }                    }                });            }        });    }}
复制代码
3.免费demo源码

https://download.csdn.net/download/qq_46526828/13991522
  博主为了可以学到更多的Android知识,创建了一个安卓知识交换群,欢迎大佬入群,固然也欢迎和我一样的安卓小白,我们可以一起交换,最重要的是快乐水群,记得定个小目标,打击bat


来源:https://blog.csdn.net/qq_46526828/article/details/112005906
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )