package com.itheima.qqlogin; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; /* ##Context 是什么,Activity是Context的子类,this就是Context,getApplicationContext()返回值就是Context, > 上下文 : 程序运行的一个依赖的环境. 必须有这个环境,才可以方便的执行代码,没有就不能方便的执行代码了。 > 应用程序运行的全局的环境.帮助类. ##共享参数 SharedPerference 1. 声明sp private SharedPreferences sp; 2. 初始化sp sp = this.getSharedPreferences("config", MODE_PRIVATE); 3. 使用sp Editor editor = sp.edit(); editor.putString("qq", qq); editor.putString("password", password); //一定不要忘记 提交数据 editor.commit();//提交数据. 类似关闭流,事务 4. 读取sp sp.getString("qq", ""); */ public class MainActivity extends Activity { private EditText et_qqnumber; private EditText et_password; private CheckBox cb_remember; /** * 1. 声明一个共享参数(存储数据方便的api,专门往文件存数据) */ private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //2. 通过上下文得到一个共享参数的实例对象 sp = this.getSharedPreferences("config", MODE_PRIVATE);//config是文件名,在内存储的data/data/包名/shared_prefern/config.xml,与设置相关的都在SharedPreference里面(铃声,震动), //类似 File f = new File("config"); //寻找这些控件 et_qqnumber = (EditText) findViewById(R.id.et_qqnumber); et_password = (EditText) findViewById(R.id.et_password); cb_remember = (CheckBox) findViewById(R.id.cb_remember); restoreInfo(); } /** * 登陆按钮的点击事件 * @param view */ public void login(View view){ String qq = et_qqnumber.getText().toString().trim(); String password = et_password.getText().toString().trim(); if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(password)){ Toast.makeText(this, "用户名和密码不能为空", 0).show(); return; }else{ //判断是否需要记录用户名和密码 if(cb_remember.isChecked()){//被选中状态,需要记录用户名和密码 //TODO:记录密码 Editor editor = sp.edit();//返回值是一个编辑器,专门用来编辑文件,Editor类似于输出流。 editor.putString("qq", qq); editor.putString("password", password); editor.commit();//提交数据. 类似关闭流,事务 } //登陆操作的. 模拟登陆,数据应该提交给服务器 由服务器比较是否正确 if("10000".equals(qq)&&"123456".equals(password)){ Toast.makeText(this, "登陆成功", 0).show(); }else{ Toast.makeText(this, "登陆失败", 0).show(); } } } /** * 根据原来保存的文件信息,把qq号码和密码信息回显到界面 */ public void restoreInfo(){ //TODO:读取密码 String qq = sp.getString("qq", "");//""是默认值,如果不存在就返回"", String password = sp.getString("password", ""); et_qqnumber.setText(qq); et_password.setText(password); } }
config.xml存储的密码:
保存设置信息:
package com.itheiam.setting; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; public class MainActivity extends Activity { private CheckBox cb; private SharedPreferences sp;//保存设置的信息,例如是否开启飞行模式status为true表示开始了false表示没有开启。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cb = (CheckBox) findViewById(R.id.cb); sp = this.getSharedPreferences("config", MODE_PRIVATE); //回显数据 boolean status = sp.getBoolean("status", false);//false是默认值,默认不勾选 cb.setChecked(status); //监听变化 cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { // 当勾选状态变化的时候调用的方法 @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Editor editor = sp.edit(); editor.putBoolean("status", isChecked); // 一定不要忘记 提交数据 editor.commit();// 提交数据. 类似关闭流,事务 } }); } }