**重点内容**
1.保存用户密码与账号,使用输出流
2.读取用户密码与账号,使用输入流
activity.xml布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.tellcall.MainActivity"
>
<EditText
android:id="@+id/edittext1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入账号"
/>
<EditText
android:id="@+id/edittext2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:password="true"
android:hint="请输入密码"
/>
<RelativeLayout
android:id="@+id/container2"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<CheckBox
android:id="@+id/checkbosx1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存账户密码"
android:layout_marginTop="15sp"
android:layout_marginLeft="10sp"
android:textColor="#ED1C21"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="登录"
android:layout_below="@+id/checkbosx1"
android:layout_alignParentRight="true"
android:layout_marginRight="30sp"/>
</RelativeLayout>
</LinearLayout>
MainActivity.java文件中的代码:
这里写代码片
package com.example.eleventlogger;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText edit1;
private EditText edit2;
private CheckBox chkb_1;
private Button but_1;
private CharSequence passward;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找到我们需要的控件
edit1 = (EditText) findViewById(R.id.edittext1);
edit2 = (EditText) findViewById(R.id.edittext2);
chkb_1 = (CheckBox) findViewById(R.id.checkbosx1);
but_1 = (Button) findViewById(R.id.button1);
// 设置按钮事件内部类
but_1.setOnClickListener(new MyCilkListener());
//<String,String>可以接收到用户密码与用户账号的两个值
Map<String,String>maps = UserInfoUtils.readInfo();
if(maps == null){
//把用户账号与用户密码取出来
String name = maps.get("name");
String passward = maps.get("passward");
//把用户账号与密码显示在EditText控件上
edit1.setText(name);
edit2.setText(passward);
}
}
public class MyCilkListener implements OnClickListener {
@Override
public void onClick(View arg0) {
// 拿到文本内容
String name = edit1.getText().toString().trim();
String passward = edit2.getText().toString().trim();
// 判断文本内容是否为空
if (!TextUtils.isEmpty(name) || !TextUtils.isEmpty(passward)) {
// 判断CheckBox是否勾选
if (chkb_1.isChecked()) {
// 将账户与密码保存起来
boolean result = UserInfoUtils.saveInfo(name, passward);
if (result) {
Toast.makeText(MainActivity.this, "保存成功", 1).show();
} else {
Toast.makeText(MainActivity.this, "保存失败", 1).show();
}
} else {
Toast.makeText(MainActivity.this, "请勾选保存账户与密码", 1).show();
}
} else {
Toast.makeText(MainActivity.this, "请输入用户名与密码", 1).show();
}
}
}
}
UserInfoUtils.java文件的代码:
package com.example.eleventlogger;
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;
/*
* 运行出“保存失败”的原因:
* 1.name 与 passward的名称要去MainActitvity中的名称相同
* 2.文件保存的位置出现错误
* 正确的路径:/data/data/com.example.eleventlogger/info.txt
* 运行错误时的路径:/data/data/com.exmple.elventlogger
* 2.1 包名不能输入错误
* 2.2 必须给保存起一个 名字
*/
public class UserInfoUtils {
public static boolean saveInfo(String name, String passward) {
try {
String result = name + "##" + passward;
// 创建file类指定我们要把数据存储的位置
File file = new File("/data/data/com.example.eleventlogger/info.txt");
// 创建一个文件输出流
FileOutputStream fos = new FileOutputStream(file);
fos.write(result.getBytes());
//关闭输出流
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/*
* 获取到保存文本的数据,并将他们读取到显示框里面,第二次不用再次输入密码与账户
*/
public static Map<String, String> readInfo() {
// 定义Map,这是一个集合
try {
Map<String, String> maps = new HashMap<String, String>();
File file = new File("/data/data/com.example.eleventlogger/info.txt");
// 文本输入流
FileInputStream fis = new FileInputStream(file);
//将读取的数据保存至缓冲区
BufferedReader bufr = new BufferedReader(new InputStreamReader(fis));
String content = bufr.readLine();// 读取数据
// 切割字符串封装到map集合中
String[] splits = content.split("##");
String name = splits[0];
String passward = splits[1];
// 把name 与 pwd 放入map中
maps.put("name", name);
maps.put(" passward", passward);
fis.close();
return maps;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}