用數據庫存儲方式代替SharedPreferences

第一次寫博客,不足之處,請多多指點。主要是練手。 html

來自個人CSDN:http://blog.csdn.net/kareci/article/details/8979909 java

--------------------------------------------- 我是分割線 (華麗的 @ - @)--------------------------------------------- android

   在應用開發中SharedPreferences確實很好用,可是最近應用崩潰時候,遇到SharedPreferences數據丟失問題。因此只有轉用數據庫存儲,但願能解決問題。 sql

模擬一個簡單的SharedPreferences工具,嘿嘿。主要就是簡單實現幾個主要數據類型的存儲。我支持的類型是:String,boolean,int,long,float,還有一個SharedPreferences不支持的Date類型。 數據庫

廢話很少說,上代碼,由於都有註釋,因此LZ不做多餘解釋。 0 - 0 app

1.對象 編輯器

package com.example.TimerTest.share;

import java.io.Serializable;
import java.util.Date;

/**
 * <b>數據存儲對象</b></br>
 *
 * @author Jony
 * @13-5-24
 * @下午4:28
 */
public class SharedData implements Serializable, Cloneable
{
    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private long id;

    /**
     * <br>數據對應惟一Key值<br/>
     * <br>若是數據庫已存在Key,則會覆蓋以前的數據<br/>
     */
    private String key;

    /**
     * 默認String類型值
     */
    private String mStr;

    /**
     * 默認boolean類型值 code值: 0(true) ,1(false)
     */
    private boolean mBoolean;

    /**
     * 默認int類型值
     */
    private int mInt;

    /**
     * 默認Date類型值
     */
    private Date mDate;

    /**
     * 默認long類型數據
     */
    private long mLong;

    /**
     * 默認float類型數據
     */
    private float mFloat;

    /**
     * 當前數據類型
     */
    private DataType dataType;

    /**
     * *****************************
     * 預留字段 end
     * *****************************
     */

    /**
     * 數據庫對應字段名稱
     */
    public static final String ID = "id";

    /**
     * 惟一key對應數據庫字段名稱
     */
    public static final String KEY = "key";

    /**
     * 默認String類型數據對應數據庫字段名稱
     */
    public static final String M_STR = "m_str";

    /**
     * 默認boolean對應數據庫字段名稱
     */
    public static final String M_BOOLEAN = "m_boolean";

    /**
     * 默認int對應數據庫字段名稱
     */
    public static final String M_INT = "m_int";

    /**
     * 默認Date對應數據庫字段名稱
     */
    public static final String M_DATE = "m_date";

    /**
     * 默認long對應數據庫字段名稱
     */
    public static final String M_LONG = "m_long";

    /**
     * 默認float對應數據庫字段名稱
     */
    public static final String M_FLOAT = "m_float";

    /**
     * 數據類型數據庫字段名稱
     */
    public static final String DATA_TYPE = "data_type";

    /**
     * 表名
     */
    public static final String TABLE_NAME = "t_shared_data";

    public long getId()
    {
        return id;
    }

    public void setId(long id)
    {
        this.id = id;
    }

    public String getKey()
    {
        return key;
    }

    public void setKey(String key)
    {
        this.key = key;
    }

    public String getmStr()
    {
        return mStr;
    }

    public void setmStr(String mStr)
    {
        this.mStr = mStr;
    }

    public boolean ismBoolean()
    {
        return mBoolean;
    }

    public void setmBoolean(boolean mBoolean)
    {
        this.mBoolean = mBoolean;
    }

    public int getmInt()
    {
        return mInt;
    }

    public void setmInt(int mInt)
    {
        this.mInt = mInt;
    }

    public Date getmDate()
    {
        return mDate;
    }

    public void setmDate(Date mDate)
    {
        this.mDate = mDate;
    }

    public long getmLong()
    {
        return mLong;
    }

    public void setmLong(long mLong)
    {
        this.mLong = mLong;
    }

    public float getmFloat()
    {
        return mFloat;
    }

    public void setmFloat(float mFloat)
    {
        this.mFloat = mFloat;
    }

    public DataType getDataType()
    {
        return dataType;
    }

    public void setDataType(DataType dataType)
    {
        this.dataType = dataType;
    }


    @Override
    public String toString()
    {
        return "SharedData{" +
                "id=" + id +
                ", key='" + key + '\'' +
                ", mStr='" + mStr + '\'' +
                ", mBoolean=" + mBoolean +
                ", mInt=" + mInt +
                ", mDate=" + mDate +
                ", mLong=" + mLong +
                ", mFloat=" + mFloat +
                ", dataType=" + dataType +
                '}';
    }
}
2. 數據類型

package com.example.TimerTest.share;

/**
 * <b>SharedData對應的數據類型</b></br>
 *
 * @author Jony
 * @13-5-27
 * @上午10:29
 */
public enum DataType
{
    STRING(0), BOOLEAN(1), INT(2), DATA(3), LONG(4), FLOAT(5);

    private int value;

    private DataType(int value)
    {
        this.value = value;
    }

    public int getValue()
    {
        return value;
    }

    public void setValue(int value)
    {
        this.value = value;
    }

    /**
     * 根據值獲取當前數據類型對象
     *
     * @param value
     * @return
     */
    public static DataType getDataTypeByValue(int value)
    {
        for (DataType type : DataType.values())
        {
            if (type.value == value)
            {
                return type;
            }
        }
        return null;
    }
}

3.數據庫 ide

package com.example.TimerTest.share;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * <b>數據庫操做助手</b></br>
 *
 * @author Jony
 * @12-7-12
 * @上午10:53
 */
public class LocalSqLiteHelper extends SQLiteOpenHelper
{
    public LocalSqLiteHelper(Context context, String name,
                             SQLiteDatabase.CursorFactory factory, int version)
    {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase)
    {
        //建立表
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "
                + SharedData.TABLE_NAME + "(" + SharedData.ID
                + " integer primary key autoincrement,"
                + SharedData.KEY + " varchar,"
                + SharedData.M_STR + " varchar,"
                + SharedData.M_BOOLEAN + " integer(1),"
                + SharedData.M_DATE + " datetime,"
                + SharedData.M_INT + " integer,"
                + SharedData.M_LONG + " int8, "
                + SharedData.M_FLOAT + " float,"
                + SharedData.DATA_TYPE + " integer" + ")");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion,
                          int newVersion)
    {
        onCreate(sqLiteDatabase);
    }
}
 數據庫助手:

package com.example.TimerTest.share;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * <b>SharedData對象數據庫操做助手</b></br>
 *
 * @author Jony
 * @13-5-24
 * @下午5:13
 * @since xCloud4.1
 */
public class SharedDataSqLiteHelper
{

    /**
     * 數據庫存放code值 1 - 表示 boolean 中的 true
     */
    public static final int TRUE_CODE = 1;

    public static final int VERSION = 1;

    public static final String DB_NAME = "myTest.db";

    /**
     * 時間格式
     */
    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 本地數據庫助手
     */
    private LocalSqLiteHelper localSqLiteHelper;

    private SQLiteDatabase sqLiteDatabase;

    private boolean isClosed;

    /**
     * 時間格式化對象
     */
    private SimpleDateFormat sDateFormat;

    /**
     * 默認建立可寫數據庫
     *
     * @param context
     */
    public SharedDataSqLiteHelper(Context context)
    {
        localSqLiteHelper = new LocalSqLiteHelper(context,
                DB_NAME, null, VERSION);
        sDateFormat = new SimpleDateFormat(DATE_FORMAT);

        try
        {
            sqLiteDatabase = localSqLiteHelper.getWritableDatabase();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 保存數據
     *
     * @param sharedData
     * @return
     */
    public long putData(SharedData sharedData)
    {
        long id = -1;
        if (sharedData == null || TextUtils.isEmpty(sharedData.getKey()) || sharedData.getDataType() == null)
        {
            return id;
        }

        long dataId = hasData(sharedData);

        if (dataId > 0)
        {
            sharedData.setId(dataId);
            int row = updateDataById(sharedData);

            if (row > 0)
            {
                return dataId;
            }
        }
        else
        {
            id = saveData(sharedData);
        }

        return id;
    }

    /**
     * 根據Key 刪除數據
     *
     * @param key
     * @return
     */
    public boolean remove(String key)
    {
        if (TextUtils.isEmpty(key))
        {
            return false;
        }

        long rows = -1;

        try
        {
            rows = sqLiteDatabase.delete(SharedData.TABLE_NAME,
                    SharedData.KEY + " = ?", new String[]
                    {
                            key
                    });
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return rows > 0;
    }

    /**
     * 根據Key獲取相應的數據
     *
     * @param key
     * @return
     */
    public SharedData getGlobalDataByKey(String key)
    {
        if (TextUtils.isEmpty(key))
        {
            return null;
        }

        SharedData sharedData = null;
        String sql = "select * from " + SharedData.TABLE_NAME + " where "
                + SharedData.KEY + "=\"" + key + "\" order by "
                + SharedData.ID + " desc";
        Cursor cursor = null;
        try
        {
            cursor = sqLiteDatabase.rawQuery(sql, null);
            if (cursor.moveToFirst())
            {
                long id = cursor.getLong(cursor.getColumnIndex(SharedData.ID));

                String mKey = cursor.getString(cursor
                        .getColumnIndex(SharedData.KEY));

                String mStr = cursor.getString(cursor
                        .getColumnIndex(SharedData.M_STR));

                int boolCode = cursor.getInt(cursor
                        .getColumnIndex(SharedData.M_BOOLEAN));

                int mInt = cursor.getInt(cursor
                        .getColumnIndex(SharedData.M_INT));

                String dataStr = cursor.getString(cursor
                        .getColumnIndex(SharedData.M_DATE));
                Date mData = null;
                int trueCode = TRUE_CODE;

                boolean mBoolean = boolCode == trueCode;

                long mLong = cursor.getLong(cursor.getColumnIndex(SharedData.M_LONG));

                float mFloat = cursor.getFloat(cursor.getColumnIndex(SharedData.M_FLOAT));

                int mTypeCode = cursor.getInt(cursor.getColumnIndex(SharedData.DATA_TYPE));

                DataType dataType = DataType.getDataTypeByValue(mTypeCode);

                try
                {
                    if (!TextUtils.isEmpty(dataStr))
                        mData = sDateFormat.parse(dataStr);
                }
                catch (ParseException e)
                {
                    e.printStackTrace();
                }

                sharedData = new SharedData();
                sharedData.setId(id);
                sharedData.setKey(mKey);
                sharedData.setmStr(mStr);
                sharedData.setmBoolean(mBoolean);
                sharedData.setmInt(mInt);
                sharedData.setmDate(mData);
                sharedData.setmLong(mLong);
                sharedData.setmFloat(mFloat);
                sharedData.setDataType(dataType);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (null != cursor && !cursor.isClosed())
            {
                cursor.close();
            }
        }

        return sharedData;
    }

    /**
     * 保存數據
     *
     * @param sharedData
     * @return
     */
    private long saveData(SharedData sharedData)
    {
        long id = -1;

        if (sharedData == null || TextUtils.isEmpty(sharedData.getKey()) || sharedData.getDataType() == null)
        {
            return id;
        }

        ContentValues contentValues = new ContentValues();
        contentValues.put(SharedData.KEY, sharedData.getKey());
        contentValues.put(SharedData.M_STR, sharedData.getmStr());
        contentValues.put(SharedData.M_BOOLEAN, sharedData.ismBoolean());
        contentValues.put(SharedData.M_INT, sharedData.getmInt());
        contentValues.put(SharedData.M_LONG, sharedData.getmLong());
        contentValues.put(SharedData.M_FLOAT, sharedData.getmFloat());
        contentValues.put(SharedData.DATA_TYPE, sharedData.getDataType().getValue());

        String mTime = null;

        if (sharedData.getmDate() != null)
        {
            mTime = sDateFormat.format(sharedData.getmDate());
        }

        contentValues.put(SharedData.M_DATE, mTime);

        try
        {
            id = sqLiteDatabase.insert(SharedData.TABLE_NAME, null, contentValues);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return id;
    }


    /**
     * 根據ID更新數據
     *
     * @param sharedData
     * @return
     */
    private int updateDataById(SharedData sharedData)
    {
        int rows = 0;

        if (sharedData == null || TextUtils.isEmpty(sharedData.getKey())
                || sharedData.getId() <= 0 || sharedData.getDataType() == null)
        {
            return -1;
        }

        // 更新保存
        ContentValues contentValues = new ContentValues();
        contentValues.put(SharedData.KEY, sharedData.getKey());
        contentValues.put(SharedData.M_STR, sharedData.getmStr());
        contentValues.put(SharedData.M_BOOLEAN, sharedData.ismBoolean());
        contentValues.put(SharedData.M_INT, sharedData.getmInt());
        contentValues.put(SharedData.M_LONG, sharedData.getmLong());
        contentValues.put(SharedData.M_FLOAT, sharedData.getmFloat());
        contentValues.put(SharedData.DATA_TYPE, sharedData.getDataType().getValue());

        String mTime = null;

        if (sharedData.getmDate() != null)
        {
            mTime = sDateFormat.format(sharedData.getmDate());
        }

        contentValues.put(SharedData.M_DATE, mTime);

        try
        {
            rows = sqLiteDatabase.update(SharedData.TABLE_NAME,
                    contentValues, SharedData.ID + "= ? ", new String[]
                    {
                            String.valueOf(sharedData.getId())
                    });
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return rows;
    }

    /**
     * 是否存在key值
     *
     * @param key
     * @return
     */
    public boolean contains(String key)
    {
        if (TextUtils.isEmpty(key))
        {
            return false;
        }

        String sql = "select count(*) from " + SharedData.TABLE_NAME
                + " where " + SharedData.KEY + "=\""
                + key + "\"";

        Cursor cursor = null;
        try
        {
            cursor = sqLiteDatabase.rawQuery(sql, null);
            cursor.moveToFirst();
            long count = cursor.getLong(0);
            if (count > 0)
            {
                return true;
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (null != cursor && !cursor.isClosed())
            {
                cursor.close();
            }
        }

        return false;
    }


    /**
     * 是否存在數據,存在則返回相應ID
     *
     * @param sharedData
     * @return
     */
    private long hasData(SharedData sharedData)
    {
        if (sharedData == null || TextUtils.isEmpty(sharedData.getKey()))
        {
            return -1;
        }

        String sql = "select * from " + SharedData.TABLE_NAME
                + " where " + SharedData.KEY + "=\""
                + sharedData.getKey() + "\"";

        Cursor cursor = null;
        try
        {
            cursor = sqLiteDatabase.rawQuery(sql, null);

            if (cursor.moveToFirst())
            {
                long id = cursor.getLong(cursor.getColumnIndex(SharedData.ID));

                if (id > 0)
                {
                    return id;
                }

            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (null != cursor && !cursor.isClosed())
            {
                cursor.close();
            }
        }

        return -1;
    }


    public boolean isClosed()
    {
        return isClosed;
    }

    public void close()
    {
        if (!isClosed)
        {
            try
            {
                if (null != localSqLiteHelper)
                {
                    localSqLiteHelper.close();
                }

                if (null != sqLiteDatabase)
                {
                    sqLiteDatabase.close();
                }
                isClosed = true;
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

    /**
     * 查詢記錄的總數
     */
    public long getCount()
    {
        String sql = "select count(*) from " + SharedData.TABLE_NAME;
        Cursor cursor = null;
        long length = 0;
        try
        {
            cursor = sqLiteDatabase.rawQuery(sql, null);
            cursor.moveToFirst();
            length = cursor.getLong(0);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (null != cursor && !cursor.isClosed())
            {
                cursor.close();
            }
        }
        return length;
    }

    /**
     * 刪除表中全部數據
     */
    public boolean clearAll()
    {
        String sql = "delete from " + SharedData.TABLE_NAME;

        Cursor cursor = null;
        Boolean hasData = false;

        try
        {
            sqLiteDatabase.execSQL(sql);
            cursor = sqLiteDatabase.query(SharedData.TABLE_NAME, null, null, null,
                    null, null, null);
            hasData = cursor.moveToFirst();

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (null != cursor && !cursor.isClosed())
            {
                cursor.close();
            }
        }

        return !hasData;
    }
}
4.工具類

package com.example.TimerTest.share;

import android.content.Context;
import android.text.TextUtils;

import java.util.Date;
import java.util.HashMap;

/**
 * <b>數據操做工具類</b></br>
 *
 * @author Jony
 * @13-5-24
 * @下午5:59
 */
public class SharedDataUtil
{
    /**
     * 數據庫操做助手
     */
    private SharedDataSqLiteHelper sharedDataSqLiteHelper;

    private static SharedDataUtil sharedDataUtil;

    private SharedDataEditor sharedDataEditor;

    private SharedDataUtil(Context context)
    {
        if (sharedDataSqLiteHelper == null || sharedDataSqLiteHelper.isClosed())
        {
            this.sharedDataSqLiteHelper = new SharedDataSqLiteHelper(context);
        }
    }

    public static synchronized SharedDataUtil getInstance(Context context)
    {
        if (context == null)
        {
            return null;
        }

        if (sharedDataUtil == null)
        {
            sharedDataUtil = new SharedDataUtil(context);
        }

        return sharedDataUtil;
    }

    /**
     * 根據key獲取String類型數據
     *
     * @param key
     * @param defaultValue 默認值,無值時返回傳入的默認值
     * @return
     */
    public String getString(String key, String defaultValue)
    {
        if (TextUtils.isEmpty(key))
            return defaultValue;

        SharedData sharedData = this.sharedDataSqLiteHelper.getGlobalDataByKey(key);

        if (sharedData == null || sharedData.getDataType() != DataType.STRING)
        {
            return defaultValue;
        }

        return sharedData.getmStr();
    }

    /**
     * 根據key獲取boolean類型數據
     *
     * @param key
     * @param defaultValue 默認值,無值時返回傳入的默認值
     * @return
     */
    public boolean getBoolean(String key, boolean defaultValue)
    {
        if (TextUtils.isEmpty(key))
            return defaultValue;

        SharedData sharedData = this.sharedDataSqLiteHelper.getGlobalDataByKey(key);

        if (sharedData == null || sharedData.getDataType() != DataType.BOOLEAN)
        {
            return defaultValue;
        }

        return sharedData.ismBoolean();
    }

    /**
     * 根據key獲取int類型數據
     *
     * @param key
     * @param defaultValue 默認值,無值時返回傳入的默認值
     * @return
     */
    public int getInt(String key, int defaultValue)
    {
        if (TextUtils.isEmpty(key))
            return defaultValue;

        SharedData sharedData = this.sharedDataSqLiteHelper.getGlobalDataByKey(key);

        if (sharedData == null || sharedData.getDataType() != DataType.INT)
        {
            return defaultValue;
        }

        return sharedData.getmInt();
    }

    /**
     * 根據key獲取Date類型數據
     *
     * @param key
     * @param defaultValue 默認值,無值時返回傳入的默認值
     * @return
     */
    public Date getDate(String key, Date defaultValue)
    {
        if (TextUtils.isEmpty(key))
            return defaultValue;

        SharedData sharedData = this.sharedDataSqLiteHelper.getGlobalDataByKey(key);

        if (sharedData == null || sharedData.getDataType() != DataType.DATA)
        {
            return defaultValue;
        }

        return sharedData.getmDate();
    }

    /**
     * 根據key獲取long類型數據
     *
     * @param key
     * @param defaultValue 默認值,無值時返回傳入的默認值
     * @return
     */
    public long getLong(String key, long defaultValue)
    {
        if (TextUtils.isEmpty(key))
            return defaultValue;

        SharedData sharedData = this.sharedDataSqLiteHelper.getGlobalDataByKey(key);

        if (sharedData == null || sharedData.getDataType() != DataType.LONG)
        {
            return defaultValue;
        }

        return sharedData.getmLong();
    }

    /**
     * 根據key獲取float類型數據
     *
     * @param key
     * @param defaultValue 默認值,無值時返回傳入的默認值
     * @return
     */
    public float getFloat(String key, float defaultValue)
    {
        if (TextUtils.isEmpty(key))
            return defaultValue;

        SharedData sharedData = this.sharedDataSqLiteHelper.getGlobalDataByKey(key);

        if (sharedData == null || sharedData.getDataType() != DataType.FLOAT)
        {
            return defaultValue;
        }

        return sharedData.getmFloat();
    }


    /**
     * 是否存在該key
     *
     * @param key
     * @return
     */
    public boolean contains(String key)
    {
        if (TextUtils.isEmpty(key))
            return false;

        return this.sharedDataSqLiteHelper.contains(key);
    }

    /**
     * 刪除該key對應的數據
     *
     * @param key
     * @return
     */
    public boolean remove(String key)
    {
        if (TextUtils.isEmpty(key))
            return false;

        return this.sharedDataSqLiteHelper.remove(key);
    }

    /**
     * 清除全部數據
     *
     * @return
     */
    public boolean clear()
    {
        return this.sharedDataSqLiteHelper.clearAll();
    }


    /**
     * 獲取編輯器
     *
     * @return
     */
    public SharedDataEditor getSharedDataEditor()
    {
        if (sharedDataEditor == null)
        {
            sharedDataEditor = new SharedDataEditor();
        }

        sharedDataEditor.clearDatas();

        return sharedDataEditor;
    }

    /**
     * <br>數據編輯器<br/>
     * <br>最後使用commit()提交數據保存<br/>
     */
    public class SharedDataEditor
    {
        private HashMap<String, SharedData> sharedDataHashMap;

        public SharedDataEditor()
        {
            if (sharedDataHashMap == null)
            {
                sharedDataHashMap = new HashMap<String, SharedData>();
            }
            else
            {
                sharedDataHashMap.clear();
            }
        }

        /**
         * 放入String類型數據
         *
         * @param key
         * @param value
         * @return
         */
        public SharedDataEditor putString(String key, String value)
        {
            if (TextUtils.isEmpty(key) || TextUtils.isEmpty(value))
            {
                return this;
            }

            SharedData sharedData = getDefaultData();
            sharedData.setKey(key);
            sharedData.setmStr(value);
            sharedData.setDataType(DataType.STRING);

            sharedDataHashMap.put(key, sharedData);

            return this;
        }

        /**
         * 放入boolean類型數據
         *
         * @param key
         * @param value
         * @return
         */
        public SharedDataEditor putBoolean(String key, boolean value)
        {
            if (TextUtils.isEmpty(key))
                return this;

            SharedData sharedData = getDefaultData();
            sharedData.setKey(key);
            sharedData.setmBoolean(value);
            sharedData.setDataType(DataType.BOOLEAN);
            sharedDataHashMap.put(key, sharedData);

            return this;
        }

        /**
         * 放入int類型數據
         *
         * @param key
         * @param value
         * @return
         */
        public SharedDataEditor putInt(String key, int value)
        {
            if (TextUtils.isEmpty(key))
                return this;

            SharedData sharedData = getDefaultData();
            sharedData.setKey(key);
            sharedData.setmInt(value);
            sharedData.setDataType(DataType.INT);

            sharedDataHashMap.put(key, sharedData);

            return this;
        }

        /**
         * 放入Date類型數據
         *
         * @param key
         * @param date
         * @return
         */
        public SharedDataEditor putDate(String key, Date date)
        {
            if (TextUtils.isEmpty(key) || date == null)
                return this;

            SharedData sharedData = getDefaultData();
            sharedData.setKey(key);
            sharedData.setmDate(date);
            sharedData.setDataType(DataType.DATA);

            sharedDataHashMap.put(key, sharedData);

            return this;
        }

        /**
         * 放入Long類型數據
         *
         * @param key
         * @param value
         * @return
         */
        public SharedDataEditor putLong(String key, long value)
        {
            if (TextUtils.isEmpty(key))
                return this;

            SharedData sharedData = getDefaultData();
            sharedData.setKey(key);
            sharedData.setmLong(value);
            sharedData.setDataType(DataType.LONG);
            sharedDataHashMap.put(key, sharedData);

            return this;
        }

        /**
         * 放入float類型數據
         *
         * @param key
         * @param value
         * @return
         */
        public SharedDataEditor putFloat(String key, float value)
        {
            if (TextUtils.isEmpty(key))
                return this;

            SharedData sharedData = getDefaultData();
            sharedData.setKey(key);
            sharedData.setmFloat(value);
            sharedData.setDataType(DataType.FLOAT);
            sharedDataHashMap.put(key, sharedData);

            return this;
        }

        /**
         * 保存數據
         *
         * @return
         */
        public boolean commit()
        {
            boolean isSuccess = false;

            SharedDataSqLiteHelper sharedDataSqLiteHelper1 = sharedDataSqLiteHelper;

            for (SharedData sharedData : sharedDataHashMap.values())
            {
                if (sharedData != null)
                {
                    long id = sharedDataSqLiteHelper1.putData(sharedData);

                    isSuccess = id > 0;
                }
            }

            sharedDataHashMap.clear();

            return isSuccess;
        }

        /**
         * 清除數據
         */
        public void clearDatas()
        {
            if (sharedDataHashMap != null)
                sharedDataHashMap.clear();
        }
    }


    /**
     * 獲取一個默認數據對象
     *
     * @return
     */
    private SharedData getDefaultData()
    {
        SharedData sharedData = new SharedData();
        sharedData.setmStr(null);
        sharedData.setmBoolean(false);
        sharedData.setmDate(null);
        sharedData.setmInt(-1);
        sharedData.setmLong(-1);
        sharedData.setmFloat(-1f);
        sharedData.setDataType(null);
        return sharedData;
    }
}
以上就是主要代碼,下面是我本身的測試類,展現了使用方法,嘿嘿:

package com.example.TimerTest.share;

import android.app.Activity;
import android.os.Bundle;

import java.util.Date;

/**
 * <b></b></br>
 *
 * @author Jony
 * @13-5-27
 * @上午11:20
 */
public class SharedDataTestActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        final SharedDataUtil sharedDataUtil = SharedDataUtil.getInstance(this);

        new Thread(new Runnable()
        {
            @Override
            public void run()
            {

                SharedDataUtil.SharedDataEditor globalDataEditor = sharedDataUtil.getSharedDataEditor();

                globalDataEditor.putString("str1", "test..put str");
                globalDataEditor.putBoolean("bol1", true);
                globalDataEditor.putDate("date1", new Date());
                globalDataEditor.putInt("int1", 999);
                globalDataEditor.putLong("long1", 123456654);
                globalDataEditor.putFloat("float1", 9.99f);

                globalDataEditor.commit();


                String str = sharedDataUtil.getString("str1", "deafult...");
                boolean bol = sharedDataUtil.getBoolean("bol1", false);
                Date date = sharedDataUtil.getDate("date1", null);
                int myint = sharedDataUtil.getInt("int1", -100);
                long mylong = sharedDataUtil.getLong("long1", 0);
                float myFloat = sharedDataUtil.getFloat("float1", 0.0f);

                System.out.println(str);
                System.out.println(bol);
                System.out.println(date);
                System.out.println(myint);
                System.out.println(mylong);
                System.out.println(myFloat);


            }
        }).start();


    }
}
測試結果:

05-27 14:53:27.509: INFO/System.out(3572): test..put str  
05-27 14:53:27.509: INFO/System.out(3572): true  
05-27 14:53:27.509: INFO/System.out(3572): Mon May 27 14:53:26 格林尼治標準時間+0800 2013  
05-27 14:53:27.509: INFO/System.out(3572): 999  
05-27 14:53:27.509: INFO/System.out(3572): 123456654  
05-27 14:53:27.519: INFO/System.out(3572): 9.99
好了,完成。 0 - 0
相關文章
相關標籤/搜索