我们通过一个模拟用户登录的界面来将用户的数据写到文件中,之后在用户打开应用时用过读取文件中的信息将数据回显在登录界面。
用户登录界面设计代码如下:
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.yzx.login.MainActivity" >
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="用户名" />
<EditText
android:id="@+id/et_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/username"
android:layout_alignParentRight="true"
android:layout_below="@id/username"
android:hint="请输入用户名" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/et_number"
android:layout_alignParentLeft="true"
android:layout_marginTop="29dp"
android:text="密码" />
<EditText
android:id="@+id/et_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:layout_alignLeft="@id/et_number"
android:layout_alignParentRight="true"
android:layout_marginBottom="29dp"
android:hint="请输入密码"
android:inputType="textPassword" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/et_password"
android:onClick="login"
android:text="登录" />
<CheckBox
android:id="@+id/cb_remeber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/button1"
android:layout_alignBottom="@id/button1"
android:layout_toRightOf="@id/button1"
android:checked="true"
android:text="记住密码" />
</RelativeLayout>
运行效果:
MainActivity.java文件代码:
package cn.yzx.login;
import java.util.Map;
import cn.yzx.login.savefileservice.SaveFileService;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
EditText et_number = null;
EditText et_password = null;
CheckBox cb_remeber = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取控件的对象
et_number = (EditText) findViewById(R.id.et_number);
et_password = (EditText) findViewById(R.id.et_password);
cb_remeber = (CheckBox) findViewById(R.id.cb_remeber);
// 回显数据
Map<String, String> userMap = SaveFileService.getUserInfo(this);
if (userMap != null) {
et_number.setText(userMap.get("username"));
et_password.setText(userMap.get("password"));
}
}
public void login(View v) {
// 获取et控件内的内容
String username = et_number.getText().toString().trim();
String password = et_password.getText().toString().trim();
// 判断内容是否为空
if (TextUtils.isEmpty(password) || TextUtils.isEmpty(username)) {
Toast.makeText(this, "用户名或密码不能为空", 0).show();
} else {
if ("zhangsan".equals(username) && "123".equals(password)) {
Toast.makeText(this, "恭喜您", 0).show();
// 存储数据到文件
if (cb_remeber.isChecked()) {
boolean isSave = SaveFileService.saveFile(this, username,
password);
if (isSave) {
Toast.makeText(this, "保存成功", 0).show();
} else {
Toast.makeText(this, "保存失败", 0).show();
}
}
} else {
Toast.makeText(this, "用户名或密码错误", 0).show();
}
}
}
}
SaveFileServer.java代码:
package cn.yzx.login.savefileservice;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
public class SaveFileService {
//保存数据
public static boolean saveFile(Context context,String username,String password){
//创建文件对象
//File file = new File("/data/data/cn.yzx.login", "info.txt");
//创建文件对象 通过file目录
//File file = new File(context.getFilesDir(),"info.txt");
//创建文件对象 通过cache目录
File file = new File(context.getCacheDir(), "info.txt");
try {
//文件输出流
FileOutputStream fos = new FileOutputStream(file);
//写数据
fos.write((username + "##" + password).getBytes());
//关闭文件流
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
//数据回显
public static Map<String, String> getUserInfo(Context context){
//获取文件对象
//File file = new File("/data/data/cn.yzx.login", "info.txt");
//获取文件对象
//File file = new File(context.getFilesDir(), "info.txt");
//获取文件对象
File file = new File(context.getCacheDir(), "info.txt");
try {
//输入流
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
//读取文件中的内容
String result = br.readLine();
//拆分成String[]
String[] results = result.split("##");
//将数据存到map集合中
Map<String, String> userMap = new HashMap<String, String>();
userMap.put("username", results[0]);
userMap.put("password", results[1]);
return userMap;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
代码注释的很清楚,在此就不过多解释了。