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

1.Android 登录注册修改密码

Bmob详细介绍和使用方法 传送门

1.demo核心代码

1.注册账号

BmobQuery<BmobUser> categoryBmobQuery = new BmobQuery<>();
                categoryBmobQuery.addWhereEqualTo("username", mEditText.getText().toString());
                categoryBmobQuery.findObjects(new FindListener<BmobUser>() {
    
    
                    @Override
                    public void done(List<BmobUser> 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<BmobUser>() {
    
    
                                    @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.登录账号

 //要延时的程序 
                String strUsername = mEditText.getText().toString();
                String strPassword = mEditText2.getText().toString();
                //获取用户输入的账号和密码

                BmobUser userlogin=new BmobUser();
                userlogin.setUsername(strUsername);
                userlogin.setPassword(strPassword);
                userlogin.login(new SaveListener<BmobUser>() {
    
    
                    @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.修改密码

 					//新密码
                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依赖

 //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'

第二步,添加权限和相关配置

在这里插入图片描述
权限

  <!-- 允许联网 -->
    <uses-permission android:name="android.permission.INTERNET" /> <!-- 获取GSM(2g)、WCDMA(联通3g)等网络状态的信息 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取wifi网络状态的信息 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 获取sd卡写的权限,用于文件上传和下载 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许读取手机状态 用于创建BmobInstallation -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

允许http请求

   android:usesCleartextTraffic="true"

application初始化

Myapplication

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实体类

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代码

登录主界面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#7adfb8"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity" >

    <include
        android:id="@+id/main_title"
        layout="@layout/title_layout" />

    <LinearLayout
        android:layout_marginTop="40dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/main_title"
        android:orientation="vertical" >

        <com.hnucm18jr.myapplication.CircleImageView
            android:layout_width="55dip"
            android:layout_height="55dip"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/head" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:gravity="center"
            android:text="登录界面"

            android:textColor="#ffffff"
            android:textSize="36sp" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="欢迎使用"
            android:textColor="#ffffff"
            android:textSize="16sp" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" >

        <include
            android:id="@+id/input_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            layout="@layout/input_layout" />

        <include
            android:id="@+id/layout_progress"
            android:layout_width="match_parent"
            android:layout_height="130dip"
            layout="@layout/layout_progress"
            android:visibility="gone" />

        <TextView
            android:id="@+id/main_btn_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/input_layout"
            android:layout_centerInParent="true"
            android:layout_marginTop="15dip"
            android:background="@drawable/text_bg"
            android:gravity="center"
            android:paddingBottom="2dip"
            android:paddingLeft="15dip"
            android:paddingRight="15dip"
            android:paddingTop="2dip"
            android:text="登录"
            android:textColor="#ffffff"
            android:textSize="20sp" />
    </RelativeLayout>

</RelativeLayout>

input_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dip"
        android:background="@drawable/radius_drawable_bg"
        android:orientation="vertical"
        android:padding="10dip" >

        <LinearLayout
            android:id="@+id/input_layout_name"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/user" />

            <EditText
                android:id="@+id/user"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="账号"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginBottom="5dip"
            android:layout_marginTop="5dip"
            android:background="#eeeeee" />

        <LinearLayout
            android:id="@+id/input_layout_psw"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/key" />

            <EditText
                android:id="@+id/key"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="密码"
                android:inputType="textPassword"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

layout_progress.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="20dip"
        android:background="@drawable/rotate_layout_bg"
        android:orientation="vertical"
        android:padding="10dip" >

        <ProgressBar
            android:id="@+id/progressBar2"
            android:layout_width="wrap_content"
            android:layout_margin="10dip"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

title_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dip"
    android:gravity="center_vertical"
    android:padding="10dip" >


    <TextView
        android:id="@+id/zhuce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:textSize="20sp"
        android:text="注册"
        />
</RelativeLayout>

圆形图片CircleImageView


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代码

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<BmobUser>() {
    
    
                    @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代码

注册主界面

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="#7adfb8"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">
    <ImageView
        android:layout_width="30dp"
        android:layout_height="30dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="15dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginLeft="15dp"
        android:src="@drawable/fanhu" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="40dp"

        android:text="注册界面"
        android:textColor="#ffffff"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/linearLayout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout

        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dip"
        android:background="@drawable/radius_drawable_bg"
        android:orientation="vertical"
        android:padding="10dip"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.32999998"
        tools:layout_editor_absoluteX="20dp">

        <LinearLayout
            android:id="@+id/input_layout_name"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/user" />

            <EditText
                android:id="@+id/user"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="账号"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginTop="5dip"
            android:layout_marginBottom="5dip"
            android:background="#eeeeee" />

        <LinearLayout
            android:id="@+id/input_layout_psw"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/key" />

            <EditText
                android:id="@+id/key"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="密码"
                android:inputType="textPassword"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/main_btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_layout"
        android:layout_centerInParent="true"
        android:background="@drawable/text_bg"
        android:gravity="center"
        android:paddingLeft="15dip"
        android:paddingTop="2dip"
        android:paddingRight="15dip"
        android:paddingBottom="2dip"
        android:text="确定"
        android:textColor="#ffffff"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity2代码

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<BmobUser> categoryBmobQuery = new BmobQuery<>();
                categoryBmobQuery.addWhereEqualTo("username", mEditText.getText().toString());
                categoryBmobQuery.findObjects(new FindListener<BmobUser>() {
    
    
                    @Override
                    public void done(List<BmobUser> 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<BmobUser>() {
    
    
                                    @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

登录成功界面

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="#7adfb8"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent"
    tools:context=".MainActivity3">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_marginBottom="40dp"
        android:text="欢迎使用"
        android:textColor="#ffffff"
        android:textSize="36sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.24000001" />

    <TextView
        android:id="@+id/main_btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_layout"
        android:layout_centerInParent="true"
        android:background="@drawable/text_bg"
        android:gravity="center"
        android:paddingLeft="15dip"
        android:paddingTop="2dip"
        android:paddingRight="15dip"
        android:paddingBottom="2dip"
        android:text="修改密码"
        android:textColor="#ffffff"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tuichu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_layout"
        android:layout_centerInParent="true"
        android:background="@drawable/text_bg"
        android:gravity="center"
        android:paddingLeft="15dip"
        android:paddingTop="2dip"
        android:paddingRight="15dip"
        android:paddingBottom="2dip"
        android:text="退出"
        android:textColor="#ffffff"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.62" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity3

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

修改密码界面

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="#7adfb8"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent"
    tools:context=".MainActivity4">
    <ImageView
        android:layout_width="30dp"
        android:layout_height="30dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="15dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginLeft="15dp"
        android:src="@drawable/fanhu" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="40dp"

        android:text="修改密码"
        android:textColor="#ffffff"
        android:textSize="36sp"
        app:layout_constraintBottom_toTopOf="@+id/linearLayout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout

        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dip"
        android:background="@drawable/radius_drawable_bg"
        android:orientation="vertical"
        android:padding="10dip"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.32999998"
        tools:layout_editor_absoluteX="20dp">

        <LinearLayout
            android:id="@+id/input_layout_name"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/user" />

            <TextView
                android:id="@+id/user"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="账号"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginTop="5dip"
            android:layout_marginBottom="5dip"
            android:background="#eeeeee" />

        <LinearLayout
            android:id="@+id/input_layout_psw"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/key" />

            <EditText
                android:id="@+id/key1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="旧密码"
                android:inputType="textPassword"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/input_layout_psw1"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/key" />

            <EditText
                android:id="@+id/key"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:background="#00000000"
                android:hint="新密码"
                android:inputType="textPassword"
                android:padding="5dip"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/main_btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_layout"
        android:layout_centerInParent="true"
        android:background="@drawable/text_bg"
        android:gravity="center"
        android:paddingLeft="15dip"
        android:paddingTop="2dip"
        android:paddingRight="15dip"
        android:paddingBottom="2dip"
        android:text="确定"
        android:textColor="#ffffff"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity4

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在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46526828/article/details/112005906