一、项目开发

1、项目运行效果图

2、开发概要

       主要功能SharedPreferences介绍,其是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。

SharedPreferences数据的四种操作模式
  • Context.MODE_PRIVATE
  • Context.MODE_APPEND
  • Context.MODE_WORLD_READABLE
  • Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件. Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件. MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入        本项目中利用的是Context.MODE_PRIVATE模式,项目运行初始化是默认的记住密码状态,当勾选自动登录的时候记住密码会自动勾选,当以记住密码的状态正确登录过一次之后,系统会记住密码,将数据信息存入Android系统,ShredPreferences中的信息以XML文件的形式保存在 /data/data/cn.edu.bzu.aminiTwitter/userInfo目录下。当系统以自动登录状态正确登录过一次之后,那么系统下一次登录就会自动调取数据进入ShowActivity.xml中。

二、开发Android-SharedPreferences程序讲解

1、项目文件如下:

2、项目开发步骤

   1、新建一个项目名字为aminiTitter,在布局文件activity_main.xml中设置文件布局,主要代码如下:

        

                    //用户名                                 //密码                //登录事件        

文本文件string.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>    aminiTwitter    Settings    Hello world!    账号:    Email或手机号    密码:    登陆    没有账号?注册    记住密码    自动登录    登录成功!    点击返回    MainActivity

注意: 册上可以写连接的地址。

布局文件background_login_div_bg.xml和background_login.xml文件代码部分如下:

background_login_div_bg.xml:

<?xml version="1.0" encoding="utf-8"?>        

background_login.xml:

<?xml version="1.0" encoding="utf-8"?>    

 

2、重点来啦,主要代码在MainActivity.xml文件中,那么代码部分如下:

package cn.edu.bzu.aminitwitter;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private CheckBox cbJiYi;private CheckBox cbZiDongDengLu;private EditText etName,etPassword;private SharedPreferences sharedPreferences;  private Button btnClick;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        findById();      //设置默认记住密码的状态        if(sharedPreferences.getBoolean("cbJiYi", true)){        cbJiYi.setChecked(true);            etName.setText(sharedPreferences.getString("etName", ""));            etPassword.setText(sharedPreferences.getString("etPassword", ""));        }      //判断自动登陆多选框的状态        if(sharedPreferences.getBoolean("cbcbZiDongDengLu", false)){            //设置默认自动登陆的状态           cbZiDongDengLu.setChecked(true);            //跳转界面            Intent intent = new Intent(MainActivity.this,ShowActivity.class);            startActivity(intent);        }        //监听自动登陆多选框事件        cbZiDongDengLu.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                // TODO Auto-generated method stub                if(cbZiDongDengLu.isChecked()){                //勾选事件                cbJiYi.setChecked(true);                sharedPreferences.edit().putBoolean("cbZiDongDengLu", true).commit();                }else{                sharedPreferences.edit().putBoolean("cbZiDongDengLu", false).commit();                }            }        });    }    private void findById() {// TODO Auto-generated method stub    cbJiYi=(CheckBox) findViewById(R.id.cbJiYi);    cbZiDongDengLu=(CheckBox) findViewById(R.id.cbZiDongDengLu);    etName=(EditText) findViewById(R.id.etName);    etPassword=(EditText) findViewById(R.id.etPassword);    btnClick=(Button) findViewById(R.id.btnName);    //创建shareaPreferences对象用来存、取数据,文件名userInfo;        sharedPreferences=this.getSharedPreferences("userInfo", Context.MODE_PRIVATE);}@Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;}    public void btnClick(View view){    if(etName.getText().toString().equals("abc") && etPassword.getText().toString().equals("aaa")){    //如果选中记住密码        if(cbJiYi.isChecked()){//        sharedPreferences.edit().putBoolean("ISCHECK", true).commit();        //存入        Editor editor=sharedPreferences.edit();        editor.putString("etName", etName.getText().toString());        editor.putString("etPassword", etPassword.getText().toString());        editor.commit();        //取出        String etName=sharedPreferences.getString("etName", "");        String etPassword=sharedPreferences.getString("etPassword", "");        Log.d("MainActivity", "etName="+etName+"\netPassword="+etPassword+"\n");        Toast.makeText(MainActivity.this, "记住用户名和密码", Toast.LENGTH_LONG).show();         }else {            //如果没选中记住密码            Toast.makeText(this, "没有记住用户名和密码", Toast.LENGTH_LONG).show();            etName.setText("");            etPassword.setText("");//            sharedPreferences.edit().putBoolean("ISCHECK", false).commit();          }        Intent intent=new Intent(MainActivity.this, ShowActivity.class);        startActivity(intent);        //finish();        if(cbJiYi.isChecked() && cbZiDongDengLu.isChecked()){            startActivity(intent);            //finish();        }    }else{    Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_LONG).show();    }    }}


主要是数据的存入和取出利用,设置多选框的默认状态的记住密码、自动登录的监听事件,默认状态是记住密码,不自动登录,在btnClick实践中判断etName、etPasswprd是否为空,然后再确定执行语句,验证密码后在确定是否执行跳转,跳转到activity_show.xml中。

3、新建另一个简单的xml文件,activity_show.xml代码如下:

            //返回    


4、修改ShowActivity.java文件,代码部分如下:

package cn.edu.bzu.aminitwitter;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;public class ShowActivity extends Activity {private Button btnBack;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去除标题

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_show);btnBack=(Button) findViewById(R.id.btnBack);btnBack.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {// TODO Auto-generated method stub//返回finish();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.show, menu);return true;}}

第二种简单方式:

public class LoginActivity extends Activity {private EditText etUser,etPassword;//定义用户名和密码private CheckBox cbRemember;//定义记住密码private Button btnLogin;//登录按钮private SharedPreferences mSpSettings=null;//声明一个sharedPreferences用于保存数据private static final String PREPS_NAME="NamePwd";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);setTitle("登录界面");findById();//获取控件setListener();//绑定事件getData();}private void setListener() {btnLogin.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {if(etUser.getText().toString().equals("zsh")&&etPassword.getText().toString().equals("123")){//判断是否记住密码,复选框是否选中if(cbRemember.isChecked()){mSpSettings=getSharedPreferences(PREPS_NAME, MODE_PRIVATE);Editor edit=mSpSettings.edit();//得到Editor对象edit.putBoolean("isKeep", true);//记录保存标记edit.putString("username", etUser.getText().toString());//记录用户名edit.putString("password", etPassword.getText().toString());//记录密码edit.commit();//**提交}else {mSpSettings=getSharedPreferences(PREPS_NAME, MODE_PRIVATE);Editor edit=mSpSettings.edit();edit.putBoolean("isKeep", true);//保存的文件名isKeepedit.putString("username", "");edit.putString("password", "");edit.commit();}//跳转Intent intent=new Intent(LoginActivity.this, LoginShowActivity.class);startActivity(intent);}else{Toast.makeText(LoginActivity.this, "密码或者用户名错误", Toast.LENGTH_SHORT).show();}}});}@Overrideprotected void onResume() {super.onResume();getData();//在界面显示数据之前得到之前存储的数据}private void getData() {mSpSettings=getSharedPreferences(PREPS_NAME, MODE_PRIVATE);if(mSpSettings.getBoolean("isKeep", false)){//如果之前存储过,则显示在相应文本框内etUser.setText(mSpSettings.getString("username", ""));etPassword.setText(mSpSettings.getString("password", ""));}else{//否则显示为空etUser.setText("");etPassword.setText("");}}private void findById() {etUser=(EditText) findViewById(R.id.etUser);etPassword=(EditText) findViewById(R.id.etPassword);cbRemember=(CheckBox) findViewById(R.id.cbRemember);btnLogin=(Button) findViewById(R.id.btnLogin);}}


5、在调试过程中注意多给Android系统加大点缓存,有利于程序的调试。这个程序其实不太成熟,比如有写代码部分没有得到有力的简化。有不好的地方希望亲抽出时间发送消息哦,在下定感激不尽!




更多相关文章

  1. 下载 Android(安卓)源代码 (2011-09-24 00:17)
  2. Android学习笔记之文件的保存与读取
  3. Android开发学习之路--Android(安卓)Studio cmake编译ffmpeg
  4. 安装android SDK和导入项目容易遇到的ERROR
  5. Android(安卓)XML文件使用
  6. react native 运行报错:Error: Command failed: gradlew.bat inst
  7. Android开发资源文件用法小结
  8. android 6.0 logcat机制(二)logcat从logd中获取log保存到文件中
  9. 浅析Android下的Android.mk文件(三)

随机推荐

  1. 面试过程中的失配与错位,大家怎么看?
  2. 汉诺塔问题
  3. WSL2:我在原生的Win10玩转Linux系统
  4. Spring Security 从问题到解决:谈踩坑、源
  5. 我是这么自学Java的
  6. 腐朽王朝的更迭:谈 SM 系统的技术升级和持
  7. 报表工具,买?自研?
  8. 讲给前端的正则表达式(3):使用 ES6 特性[
  9. 生活中,那至美
  10. 从模版方法模式到 SPI 演变 :好的思想通用