用户第一次登录的时候,勾选记住用户名和密码操作,会将此时的用户名和密码写入文件中,第二次访问的时候会读写入第一次的数据。
第一种方式是通过建立文件的方式:
MainActivity.java:
package com.lcz.qq_login;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import android.os.Bundle;
import android.os.Environment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
@SuppressLint("NewApi") public class MainActivity extends Activity implements View.OnClickListener{
private EditText qq_number;
private EditText qq_password;
private Button login_btn;
private CheckBox cbx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
qq_number=(EditText)findViewById(R.id.qqnumber);
qq_password=(EditText)findViewById(R.id.qqpassword);
login_btn=(Button)findViewById(R.id.btn_login);
cbx=(CheckBox)findViewById(R.id.remember);
login_btn.setOnClickListener(this);
//File file=new File("/data/data/com.lcz.qq_login/info.txt");保存到应用程序中
//File file=new File(this.getFilesDir(),"info.txt");保存到应用程序中
//File file=new File(this.getCacheDir(),"info.txt");//保存到sd卡中
File file=new File(Environment.getExternalStorageDirectory(),"info.txt");
if(file.exists()&&file.length()>0){
//读取file中的数据,然后回显
try {
BufferedReader br=new BufferedReader(new FileReader(file));
String line=br.readLine();
String num=line.split("#---#")[0];
String pwd=line.split("#---#")[1];
qq_number.setText(num);
qq_password.setText(pwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//点击登录后会执行login方法
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//获得输入框中写入的值
String number=qq_number.getText().toString().trim();
String password=qq_password.getText().toString().trim();
//判断是否填入了number以及password的值
if(TextUtils.isEmpty(number)||TextUtils.isEmpty(password)){
//给用户提示,输入号码和密码
Toast.makeText(this, "请输入qq号码和密码", Toast.LENGTH_SHORT).show();
return;
}
//判断是否勾选 checkbox,如果勾选了checkbox,那么将qq号码和qq密码保存下来
boolean isChecked=cbx.isChecked();
if(isChecked){
//勾选了的话,将数据保存起来
//context:上下文
//context:给用户显示的信息
//duration:消息持续的时间
try {
//File file=new File("/data/data/com.lcz.qq_login/info.txt");
//File file=new File(this.getFilesDir(),"info.txt");保存到应用程序
//File file=new File(this.getCacheDir(),"info.txt");//保存到应用程序中
//File file=new File("/mnt/sdcard/info.txt");
//File file=new File("/mnt/sdcard/info.txt");
File file=new File(Environment.getExternalStorageDirectory(),"info.txt");
OutputStream out=new FileOutputStream(file);
String value=number+"#---#"+password;
out.write(value.getBytes());
out.close();
Toast.makeText(this, "勾选了,保存成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
//没有勾选的话,不保存数据
Toast.makeText(this, "没有勾选,没有保存成功", Toast.LENGTH_SHORT).show();
}
}
}
activity_main.xml:
<LinearLayout 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:orientation="vertical"
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=".MainActivity" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/qq"
android:layout_gravity="center"/>
<EditText
android:id="@+id/qqnumber"
android:hint="请输入qq号码"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/qqpassword"
android:inputType="textPassword"
android:hint="请输入qq密码"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<CheckBox
android:id="@+id/remember"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="记住用户名和密码"/>
<Button
android:id="@+id/btn_login"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
第二种方式是通过sharedPreference来实现回显
sharedPreference是android中提供一个特有的用来保存数据的
MainActivity.java:
package com.itheima.qqlogin;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener {
private EditText ed_qqnumber;
private EditText ed_qqpassword;
private CheckBox cbx;
private Button btn_login;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
ed_qqnumber = (EditText) findViewById(R.id.qqnumber);
ed_qqpassword = (EditText) findViewById(R.id.qqpassword);
cbx = (CheckBox) findViewById(R.id.remember);
btn_login=(Button) findViewById(R.id.btn_login);
sp = getSharedPreferences("config", 0);
// 如果找到了 number的 值, 那么 就 返回 number的值, 否则 就返回 这里的默认值
String num= sp.getString("number", "");
String pwd= sp.getString("password", "");
ed_qqnumber.setText(num);
ed_qqpassword.setText(pwd);
btn_login.setOnClickListener(this);
}
//点击 登录 后会执行 login 方法
public void onClick(View v){
//获得 输入 框 中 写入的 值
String number = ed_qqnumber.getText().toString().trim();
String password = ed_qqpassword.getText().toString().trim();
// 判断 是否 填入了 number以及 password的值
if(TextUtils.isEmpty(number)||TextUtils.isEmpty(password)){
//给 用户提示, 输入 号码 和 密码
Toast.makeText(this, "请输入 qq号码 和密码 ", 0).show();
return;
}
//判断 是否勾选了checkbox ,如果勾选了checkbox ,那么就 将 qq号和密码 保存起来
boolean isChecked = cbx.isChecked();
if(isChecked){
//在勾选了 checkbox的时候, 将 数据保存起来
try {
// 将数据 保存起来, 使用 sharedPreference
// config文件将会生成 在 应用的文件夹下 --- 一个 xml 格式 的文件
// 一般 情况下, 应用自己的数据 只有 当前应用 自己可以去读, 所以 通常 会写
sp = getSharedPreferences("config", 0);
Editor editor = sp.edit();
editor.putString("number", number);
editor.putString("password", password);
editor.commit();
Toast.makeText(this, "勾选了, 保存成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "勾选了, 没 保存成功", 0).show();
}
}else{
//在没 勾选 checkbox的时候, 不保存数据
//说明没 勾选
Toast.makeText(this, "没 勾选了", 0).show();
}
}
}