Android保存QQ密码(数据存储:⽂件存储、SharedPreferences)
MainActivity.java:
package cn.lwx.saveqq;
import android.os.Bundle;
TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText etNumber;
private EditText etPassword;
private Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState){
setContentView(R.layout.activity_main);
//1、初始化界⾯
initView();
//2、如果⽤户保存了信息,进⾏数据的回显
Map<String, String> userInfo = UserInfo(this);//⼯具类
if(userInfo != null){
etNumber.("number"));
etPassword.("password"));
}
}
private void initView(){
//1、完成控件的初始化
etNumber =(EditText)findViewById(_number);
etPassword =(EditText)findViewById(_password);
btnLogin =(Button)findViewById(R.id.btn_login);
//2、设置按钮的点击事件
btnLogin.setOnClickListener(this);//当前类 implements View.OnClickListener }
@Override
public void onClick(View v){
/
/1、当单击“登录”按钮时,获取QQ账号和密码
String number = Text().toString().trim();
String password = Text().toString();
//2、检验账号和密码是否正确(是否为空)
if(TextUtils.isEmpty(number)){
Toast.makeText(this,"请输⼊QQ账号!", Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(password)){
Toast.makeText(this,"请输⼊密码!", Toast.LENGTH_SHORT).show();
return;
}
//登录成功
Toast.makeText(this,"登录成功!", Toast.LENGTH_SHORT).show();
//3、保存⽤户信息
boolean isSaveSuccess = FileSaveQQ.saveUserInfo(this, number, password);
if(isSaveSuccess){
Toast.makeText(this,"保存成功!", Toast.LENGTH_SHORT).show();
改密码qq}else{
Toast.makeText(this,"保存失败!", Toast.LENGTH_SHORT).show();
}
}
}
FileSaveQQ.java:
package cn.lwx.saveqq;
t.Context;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
public class FileSaveQQ {//⼯具类、保存账号、密码信息
//保存QQ账号和登录密码到⽂件中
//静态⽅法,通过类可直接调⽤。Context上下⽂
public static boolean saveUserInfo(Context context, String number, String password){ try{
//1、通过上下⽂获取⽂件输出流
FileOutputStream fos = context.openFileOutput("",
Context.MODE_PRIVATE);//保存信息到⽂件中。获取⽂件输出流。⽂件名、模式//2、把数据写到⽂件中
fos.write((number +":"+ password).getBytes());//转化为字节数组
fos.close();//关闭流
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
//从⽂件中获取存储的QQ账号和密码信息
public static Map<String, String>getUserInfo(Context context){
String content ="";
try{
FileInputStream fis = context.openFileInput("");//得到⽂件输⼊流byte[] buffer =new byte[fis.available()];//读取数据。缓冲区⼤⼩[fis.available()]
content =new String(buffer);
Map<String, String> userMap =new HashMap<String, String>();
String[] infos = content.split(":");
userMap.put("number", infos[0]);
userMap.put("password", infos[1]);
fis.close();
return userMap;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
l:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="schemas.android/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E6E6E6"
android:orientation="vertical">
<ImageView
android:id="@+id/iv"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:background="@drawable/head"/>
<LinearLayout
android:id="@+id/ll_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iv"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="15dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"
android:background="#ffffff">
<TextView
android:id="@+id/tv_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="账号:"
android:textColor="#000"
android:textSize="20sp"/>
<EditText
android:id="@+id/et_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:background="@null"
android:padding="10dp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/ll_number"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#ffffff">
<TextView
android:id="@+id/tv_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="密码:"
android:textColor="#000"
android:textSize="20sp"/>
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/tv_password"            android:background="@null"
android:inputType="textPassword"
android:padding="10dp"/>
</LinearLayout>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/ll_password"
android:layout_marginLeft="10dp"        android:layout_marginTop="50dp"        android:layout_marginRight="10dp"        android:background="#3C8DC4"        android:text="登录"
android:textColor="#ffffff"
android:textSize="20sp"/>
</RelativeLayout>
运⾏截图:
SharedPreferences :SPSaveQQ.java :