1.はじめに
小さなケースでは、ユーザーが入力したユーザー名とパスワードをtxt形式のファイルに保存し、次に開いたときにローカルキャッシュから読み取ります。文字ストリームは保存に使用されます。アカウントのパスワードはプレーンテキストで保存されますが、これは実際の商用アプリケーションでは行われません。このケースは、文字ストリームの操作方法を紹介するためのものです。
2.ケースの実現(コードは次のとおりです)
1.搭建UI
<?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:layout_height="match_parent">
<EditText
android:id="@+id/et_username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:ems="10"
android:hint="请输入用户名"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
android:hint="请输入密码"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_username" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="记住密码"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_password" />
<Button
android:id="@+id/bt_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:text="安全登录"
android:onClick="OnClickButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/checkBox"
app:layout_constraintTop_toBottomOf="@+id/et_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.ビジネスロジック
package com.hiscene.test03;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class MainActivity extends AppCompatActivity {
private EditText et_username;
private EditText et_password;
private CheckBox checkBox;
private final String usertxtname="user.txt";
private File fileDir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
fileDir=MainActivity.this.getFilesDir();
et_username=findViewById(R.id.et_username);
et_password=findViewById(R.id.et_password);
checkBox=findViewById(R.id.checkBox);
LoadCacheUserInfo();
}
//按钮点击事件
public void OnClickButton(View view)
{
if (view.getId() == R.id.bt_login) {
String userName = et_username.getText().toString().trim();
String password = et_password.getText().toString().trim();
Login(userName, password);
}
}
//登录
private void Login(String userName,String password) {
if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(password)) {
Toast.makeText(MainActivity.this, "用户名和密码不能为空!", Toast.LENGTH_LONG).show();
} else {
//链接服务器进行登录验证Todo....
if (checkBox.isChecked()) SaveUserInfo(userName, password);
}
}
//保存用户信息
private void SaveUserInfo(String userName,String password) {
File file = new File(fileDir,usertxtname);
try {
OutputStream out = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
BufferedWriter writer = new BufferedWriter(osw);
writer.write(userName + "#" + password);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取缓存中的用户数据
private void LoadCacheUserInfo()
{
File file = new File(fileDir,usertxtname);
if (!file.exists())return;
try {
FileReader reader =new FileReader(file);
BufferedReader br=new BufferedReader(reader);
String text=br.readLine();
String[] arr=text.split("#");
et_username.setText(arr[0]);
et_password.setText(arr[1]);
checkBox.setChecked(true);
br.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
ソースのダウンロード:リンク:https://pan.baidu.com/s/1ncgNCem4OnL8ixWQ_4VWSAパスワード:c05e