运行结果:
素材自取:
页面布局:
<?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="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_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="15dp"
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_marginRight="10dp"
android:layout_marginTop="50dp"
android:background="#3C8DC4"
android:text="登录"
android:textColor="#ffffff"
android:textSize="20sp"/>
</RelativeLayout>
添加依赖:
implementation group: 'com.google.code.gson', name: 'gson', version: '2.7'
ManiFest.xml:
读取文档权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
映射文件:
package com.example.saveqqdemo;
public class User {
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public void setPassword(String password) {
this.password = password;
}
private String number;
public String getPassword() {
return password;
}
private String password;
}
SP工具类:
package com.example.saveqqdemo;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.HashMap;
import java.util.Map;
public class SPSaveQQ {
public static boolean saveUserInfo(Context context, String number, String password ){
SharedPreferences sp=context.getSharedPreferences("data",
Context.MODE_PRIVATE);
SharedPreferences.Editor edit=sp.edit();
edit.putString("userName",number);
edit.putString("pwd",password);
edit.commit();
return true;
}
public static Map<String,String>getUserInfo(Context context){
SharedPreferences sp=context.getSharedPreferences("data",Context.MODE_PRIVATE);
String number=sp.getString("userName",null);
String password=sp.getString("pwd",null);
Map<String,String>userMap=new HashMap<String,String>();
userMap.put("number",number);
userMap.put("password",password);
return userMap;
}
}
Json工具类:
package com.example.saveqqdemo;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonSaveQQ {
public static boolean saveUserInfo(Context context, User user) {
//创建json对象
JsonObject object = new JsonObject();
//添加键值对
String number=user.getNumber();
String password=user.getPassword();
object.addProperty("number", number);
object.addProperty("password", password);
String s=object.toString();
BufferedWriter writer = null;
String fileName="userInfo";
File file = new File("E:\\"+ fileName + ".json");
//如果文件不存在,则新建一个
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//写入
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,false), "UTF-8"));
writer.write(s);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(writer != null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Log.v("json:","json:"+object.toString());
return true;
}
public static Map<String,String> getUserInfo(Context context) throws IOException {
// SharedPreferences sp=context.getSharedPreferences("data",Context.MODE_PRIVATE);
String fileName = "E:\\userInfo.json";
Gson gson=new Gson();
InputStream is = new FileInputStream("fileName");
byte[] buffer=new byte[is.available()];
is.read(buffer);
String json=new String(buffer,"utf-8");
User user=new Gson().fromJson(json,User.class);
String number=user.getNumber();
String password=user.getPassword();
Map<String,String>userMap=new HashMap<String,String>();
userMap.put("number",number);
userMap.put("password",password);
return userMap;
}
}
界面交互:
package com.example.saveqqdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
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) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Map<String,String>userInfo=SPSaveQQ.getUserInfo(this);
// boolean isSaveSuccess=SPSaveQQ.getUserInfo(this,number,password);
//初始化界面
initView();
// Map<String,String>userInfo=SPSaveQQ.getUserInfo(this);//SharePreference
Map<String,String>userInfo= null;
try {
userInfo = JsonSaveQQ.getUserInfo(this);//Gson
} catch (IOException e) {
e.printStackTrace();
}
if(userInfo!=null){
etNumber.setText(userInfo.get("number"));
etPassword.setText(userInfo.get("password"));
}
}
private void initView() {
etNumber=(EditText)findViewById(R.id.et_number);
etPassword=(EditText)findViewById(R.id.et_password);
btnLogin=(Button)findViewById(R.id.btn_login);
//设置单击事件
btnLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//单击登录时获取QQ账号和密码
User user =new User();
String number=etNumber.getText().toString().trim();
String password=etPassword.getText().toString();
user.setNumber(number);
user.setPassword(password);
//检验账号密码是否正确
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_LONG).show();
//保存用户信息
// boolean isSaveSuccess=SPSaveQQ.saveUserInfo(this,number,password);
boolean isSaveSuccess=JsonSaveQQ.saveUserInfo(this,user);
if(isSaveSuccess){
Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this,"保存失败",Toast.LENGTH_SHORT).show();
}
}
}