android 66 sharedperference的使用

简介:
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();// 提交数据. 类似关闭流,事务
            }
        });
    }

}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4919028.html,如需转载请自行联系原作者


相关文章
|
Android开发 安全 数据格式
Android LocalBroadcastManager 的使用总结
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/53105494 本文出自【赵彦军的博客】 前言 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。
1282 0
|
Java 测试技术 区块链
web3j教程:java和android如何使用web3j开发以太坊智能合约并进行交易
从广义上讲,有web3j支持三种类型的以太坊交易: 1.以太币从一方交易到另一方 2.创建一个智能合约 3.与智能合约交易 为了进行这些交易,必须有以太币(以太坊区块链的代币)存在于交易发生的以太坊账户中。
2941 0
|
Java Android开发
Android上最快使用openVC(AndroidStudio)
之前使用openVC,需要导入openCVLibrary2411库,坑的是还要安装OpenCV_2.4.3.2_Manager_2.
1248 0
|
Android开发 开发者 数据格式
写给Android开发者的混淆使用手册
本文转自:点击打开链接 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。 首先,这里说的的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。依靠 ProGuard,混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的瓶颈;同时,将类、类成员、方法重命名为无意义的简短名称,增加
6452 0
|
Android开发 数据格式 XML
Android 关于selcrot的使用声明
android:state_selected选中 android:state_focused获得焦点 android:state_pressed点击 android:state_enabled设置是否响应事件,指所有事件 <?xml version="1.0" encoding="utf-8" ?>
1202 0
|
Android开发
Android ImageView的setImageLevel和level-list使用简介
 Android ImageView的setImageLevel和level-list使用简介 在Android开发中,有时候需要对一个ImageView设置很多不同图片以表示某种应用状态,比如,典型的是手机的信号强度从强到弱有多种状态图;wifi有解锁和未解锁状态,解锁和未解锁状态的图标也是很多种。
1159 0