桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 5

165 阅读3分钟

前文: 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 4 导航:

桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 The End 导航页及收尾工作

3.实现登录功能

(1)新建一个暂时用来验证登录成功的empty activity,这里我命名为temp(后期将会替换)。

(2)添加一个矢量图,与前面的对应,用来显示/隐藏密码。

ic_baseline_visibility_off_24 代码:

MainActivity.java

package com.example.peachdictionary;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.text.method.TransformationMethod; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast; import android.widget.VideoView;

public class MainActivity extends AppCompatActivity { private ImageButton btn_login;//登录按钮 private String userName, psw, spPsw;//获取的用户名,密码,加密密码 private EditText et_user_name, et_psw;//编辑框

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     //设置此界面为竖屏
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
     videobackground();

 }

 private void videobackground() {

     //视频背景
     final VideoView videoview = findViewById(R.id.video_background);
     final String videopath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.background).toString();
     videoview.setVideoPath(videopath);
     videoview.start();
     videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
         @Override
         public void onPrepared(MediaPlayer mp) {
             mp.start();
             mp.setLooping(true);
         }
     });

     videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
         @Override
         public void onCompletion(MediaPlayer mediaPlayer) {
             videoview.setVideoPath(videopath);
             videoview.start();
         }
     });

     Button button = findViewById(R.id.button);
     button.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Intent intent = new Intent(MainActivity.this, register.class);
             startActivity(intent);
         }
     });

     EditText edPassword = findViewById(R.id.editTextTextPassword);
     ImageButton imageButton = findViewById(R.id.imageButton);

     //密码的隐藏和显示
     imageButton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             TransformationMethod type = edPassword.getTransformationMethod();
             if (PasswordTransformationMethod.getInstance().equals(type)) {
                 edPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                 imageButton.setImageResource(R.drawable.ic_baseline_visibility_off_24);
             } else {
                 edPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());

// edPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); imageButton.setImageResource(R.drawable.ic_baseline_visibility_24); } } });

/* SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit(); SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE); if(pref.getString("login",null)==null){ editor.putString("login","1"); editor.commit(); } SharedPreferences.Editor editor2 = getSharedPreferences("data",MODE_PRIVATE).edit(); SharedPreferences pref2 = getSharedPreferences("data",MODE_PRIVATE); if(pref2.getString("login","").equals("2")){ startActivity(new Intent(MainActivity.this,temp.class)); finish(); } */

     et_user_name = findViewById(R.id.editTextTextPersonName5);
     et_psw = findViewById(R.id.editTextTextPassword);
     btn_login = findViewById(R.id.imageButton4);


     //登录按钮的点击事件
     btn_login.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             //开始登录,获取用户名和密码 getText().toString().trim();
             userName = et_user_name.getText().toString().trim();
             psw = et_psw.getText().toString().trim();
             //对当前用户输入的密码进行MD5加密再进行比对判断, MD5Utils.md5( ); psw 进行加密判断是否一致
             String md5Psw = register.MD5Util.encrypt(psw);
             // md5Psw ; spPsw 为 根据从SharedPreferences中用户名读取密码
             // 定义方法 readPsw为了读取用户名,得到密码
             spPsw = readPsw(userName);
             // TextUtils.isEmpty
             if (TextUtils.isEmpty(userName)) {
                 Toast.makeText(MainActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();
                 return;
             } else if (TextUtils.isEmpty(psw)) {
                 Toast.makeText(MainActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
                 return;
                 // md5Psw.equals(); 判断,输入的密码加密后,是否与保存在SharedPreferences中一致
             } else if (md5Psw.equals(spPsw)) {

                 //editor2.putString("login","2");

                // editor2.commit();


                 //一致登录成功
                 Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                 //保存登录状态,在界面保存登录的用户名 定义个方法 saveLoginStatus boolean 状态 , userName 用户名;
                 saveLoginStatus(true, userName);
                 //登录成功后关闭此页面进入主页
                 Intent data = new Intent();
                 //datad.putExtra( ); name , value ;
                 data.putExtra("isLogin", true);
                 //RESULT_OK为Activity系统常量,状态码为-1
                 // 表示此页面下的内容操作成功将data返回到上一页面,如果是用back返回过去的则不存在用setResult传递data值
                 setResult(RESULT_OK, data);
                 //销毁登录界面
                 MainActivity.this.finish();
                 //跳转到主界面,登录成功的状态传递到 MainActivity 中
                 startActivity(new Intent(MainActivity.this, temp.class));
                 return;
             } else if ((spPsw != null && !TextUtils.isEmpty(spPsw) && !md5Psw.equals(spPsw))) {
                 Toast.makeText(MainActivity.this, "输入的用户名和密码不一致", Toast.LENGTH_SHORT).show();
                 return;
             } else {
                 Toast.makeText(MainActivity.this, "此用户名不存在", Toast.LENGTH_SHORT).show();
             }

         }


     });
 }

 /**
  * 从SharedPreferences中根据用户名读取密码
  */
 private String readPsw(String userName) {
     //getSharedPreferences("loginInfo",MODE_PRIVATE);
     //"loginInfo",mode_private; MODE_PRIVATE表示可以继续写入
     SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
     //sp.getString() userName, "";
     return sp.getString(userName, "");
 }

 /**
  * 保存登录状态和登录用户名到SharedPreferences中
  */
 private void saveLoginStatus(boolean status, String userName) {
     //saveLoginStatus(true, userName);
     //loginInfo表示文件名  SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);
     SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
     //获取编辑器
     SharedPreferences.Editor editor = sp.edit();
     //存入boolean类型的登录状态
     editor.putBoolean("isLogin", status);
     //存入登录状态时的用户名
     editor.putString("loginUserName", userName);
     //提交修改
     editor.commit();
 }

 /**
  * 注册成功的数据返回至此
  *
  * @param requestCode 请求码
  * @param resultCode  结果码
  * @param data        数据
  */

 @Override
 //显示数据, onActivityResult
 //startActivityForResult(intent, 1); 从注册界面中获取数据
 //int requestCode , int resultCode , Intent data
 // LoginActivity -> startActivityForResult -> onActivityResult();
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     //super.onActivityResult(requestCode, resultCode, data);
     super.onActivityResult(requestCode, resultCode, data);
     if (data != null) {
         //是获取注册界面回传过来的用户名
         // getExtra().getString("***");
         String userName = data.getStringExtra("userName");
         if (!TextUtils.isEmpty(userName)) {
             //设置用户名到 et_user_name 控件
             et_user_name.setText(userName);
             //et_user_name控件的setSelection()方法来设置光标位置
             et_user_name.setSelection(userName.length());
         }
     }


 }

}

其中

/* SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit(); SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE); if(pref.getString("login",null)==null){ editor.putString("login","1"); editor.commit(); } SharedPreferences.Editor editor2 = getSharedPreferences("data",MODE_PRIVATE).edit(); SharedPreferences pref2 = getSharedPreferences("data",MODE_PRIVATE); if(pref2.getString("login","").equals("2")){ startActivity(new Intent(MainActivity.this,temp.class)); finish(); } */

                 //editor2.putString("login","2");

                // editor2.commit();

此段用于检测是否为第一次登录,当不是第一次登录时,会跳过登录界面,直接进入应用。不过感觉这种写法还是有缺陷,希望有大佬能够改进一下吧。

实现效果:

———————————————— 版权声明:本文为CSDN博主「SEMHAQ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/weixin_6062…