简便轻巧的使用SharedPreferences 存储

     少量数据需要持久化的时候,我们用不到数据库保存数据(数据很少,操作数据库效率低下)。Android 给我们提供了使用键值对存储数据的SharedPreferences,也就是说,当保存数据的时候,需要给相应数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences支持多种不同数据类型的存储,如存储的数据类型是整型,那么读出来的数据也是整型,存储的数据是一个字符串,读出来的数据也是一个字符串。下面写个demo来演示一下:

首先是布局文件,三个按钮分别表示存数据,取数据,清除数据:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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: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="com.example.myapplication.MainActivity">

    <Button
        android:id="@+id/saveData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="saveDate" />

    <Button
        android:id="@+id/getSaveData"
        android:layout_below="@id/saveData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="getSaveData" />

    <Button
        android:id="@+id/clearData"
        android:layout_below="@id/getSaveData"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="clear" />
</RelativeLayout>


下面就贴出Activity中的代码:



public class MainActivity extends AppCompatActivity {

    private Button saveData ,getSaveData ,clearData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        saveData = $(R.id.saveData);
        getSaveData = $(R.id.getSaveData);
        clearData = $(R.id.clearData);

        saveData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //创建名为“data”的文件,加入键值对,保存数据
                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();


                editor.putString("name","I am  a boy ");
                //必须commit
                editor.commit();



            }
        });
        getSaveData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //取出文件中键值对,并提示出来
                SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);
                String name = preferences.getString("name","");
                Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();


            }
        });

        clearData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //
                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
                editor.clear();
                editor.commit();
            }
        });

    }

    public <T extends View> T $(int id) {
        return (T) findViewById(id);
    }
}
这样做,每次保存数据,取数据,都要commit一下,能不能封装一下呢,更方便的为我们所用呢?下面,我封装一个类,来简易操作这个SharedPreferences:



/**
 * Created by dhl on 2016/7/14.
 */
public class SharedPreferencesHelper {

    private static SharedPreferencesHelper sharedPreferencesHelper = null;

    //单例模式,把Context传进去
    public static SharedPreferencesHelper getInstance(Context context) {
        if (sharedPreferencesHelper == null) {
            synchronized (SharedPreferencesHelper.class) {
                if (sharedPreferencesHelper == null) {
                    sharedPreferencesHelper = new SharedPreferencesHelper();
                    sharedPreferencesHelper.setContext(context);
                    return sharedPreferencesHelper;
                }
            }
        }

        return sharedPreferencesHelper;
    }

    private Context context;

    public void setContext(Context context) {
        this.context = context;
    }

    //取Boolean 型数据
    public boolean getBoolean(String key, boolean defValue) {
        try {
            return getSP().getBoolean(key, defValue);
        } catch (NullPointerException exception) {
            Log.d("hcj", "" + exception);
            return defValue;
        }
    }

    //存Boolean 型数据
    public void putBoolean(String key, boolean value) {
        try {
            SharedPreferences.Editor editor = getSP().edit();
            editor.putBoolean(key, value);
            editor.commit();
        } catch (NullPointerException exception) {
            Log.d("hcj", "" + exception);
        }
    }

    //取Long 型数据
    public long getLong(String key, long defValue) {
        try {
            return getSP().getLong(key, defValue);
        } catch (NullPointerException exception) {
            Log.d("hcj", "" + exception);
            return defValue;
        }
    }
    //存Long 型数据
    public void putLong(String key, long value) {
        try {
            SharedPreferences.Editor editor = getSP().edit();
            editor.putLong(key, value);
            editor.commit();
        } catch (NullPointerException exception) {
            Log.d("hcj", "" + exception);
        }
    }

    //取整型
    public int getInt(String key, int defaultValue) {
        try {
            return getSP().getInt(key, defaultValue);
        } catch (Exception e) {
            Log.d("hcj", "" + e);
            return defaultValue;

        }
    }

    //存整型
    public void putInt(String key, int value) {
        try {
            SharedPreferences.Editor editor = getSP().edit();
            editor.putInt(key, value);
            editor.commit();
        } catch (Exception e) {
            Log.d("hcj", "" + e);
        }
    }

    //取String
    public String getString(String key, String defValue) {
        try {
            return getSP().getString(key, defValue);
        } catch (NullPointerException e) {
            Log.d("hcj", "" + e);
            return defValue;
        }
    }

    //存String
    public void putString(String key, String value) {
        try {
            SharedPreferences.Editor editor = getSP().edit();
            editor.putString(key, value);
            editor.commit();
        } catch (NullPointerException e) {
            Log.d("hcj", "" + e);
        }
    }

    //清除数据
    public void clear() {
        try {
            SharedPreferences.Editor editor = getSP().edit();
            editor.clear();
            editor.commit();
        } catch (NullPointerException e) {
            Log.d("hcj", "" + e);
        }
    }

    //获得SharedPreferences对象
    private SharedPreferences getSP() {
        return context.getSharedPreferences("sp", Context.MODE_PRIVATE);
    }

    private SharedPreferences getSP(String name) {
        return context.getSharedPreferences(name, Context.MODE_PRIVATE);
    }
}

MainActivity 代码修改如下:

package com.example.myapplication;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button saveData ,getSaveData ,clearData;
    private SharedPreferencesHelper sh ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        saveData = $(R.id.saveData);
        getSaveData = $(R.id.getSaveData);
        clearData = $(R.id.clearData);
        sh = SharedPreferencesHelper.getInstance(MainActivity.this);
        saveData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

              /*  //创建名为“data”的文件,加入键值对,保存数据
                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();


                editor.putString("name","I am  a boy ");
                //必须commit
                editor.commit();*/

                sh.putString("name","*******");



            }
        });
        getSaveData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //取出文件中键值对,并提示出来
                SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);
                String name = preferences.getString("name","");
                name = sh.getString("name","");
                Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();


            }
        });

        clearData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //
                /*SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
                editor.clear();
                editor.commit();*/
                sh.clear();
            }
        });

    }

    public <T extends View> T $(int id) {
        return (T) findViewById(id);
    }
}
OK了,总结完毕。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值