欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用SharedPreferences在Android存儲對象詳細代碼

 更新時間:2021年11月04日 11:38:31   作者:banq  
這篇文章主要介紹了使用SharedPreferences在Android存儲對象并附上詳細代碼,下面文章內(nèi)容較少,大多以代碼的形式體現(xiàn),需要的小伙伴可以參考一下,希望對你有所幫助

為什么不用SQLite? 原因多種:除了面向?qū)ο蠛完P(guān)系數(shù)據(jù)庫之間的阻抗不匹配時,SQLite可能是矯枉過正(帶來了更多的開銷)對于一些簡單的用例,或者其用法和語句可能會完全不喜歡。其他Android ORM 框架(ORMLite, greenDAO, Sugar ORM, ActiveAndroid, 等)或NOSQL移動數(shù)據(jù)庫,如Couchbase精簡版(Beta版在此時間)。 Couchbase精簡版基本上是一個JSON數(shù)據(jù)庫,它們旨在降低復(fù)雜性,但是同時又違背了抽象漏洞定律(所有不證自明的抽象都是有漏洞的)

 代碼如下:

/** stores the user object in SharedPreferences */
public class UserPrefs{

    /** This application's preferences label */
    private static final String PREFS_NAME = "com.our.package.UserPrefs";


 
    /** This application's preferences */
    private static SharedPreferences settings;

   /** This application's settings editor*/
   private static SharedPreferences.Editor editor;


 
   /** Constructor takes an android.content.Context argument*/
   public UserPrefs(Context ctx){
        if(settings == null){
           settings = ctx.getSharedPreferences(PREFS_NAME,
                                               Context.MODE_PRIVATE );
        }
       /*
        * Get a SharedPreferences editor instance.
        * SharedPreferences ensures that updates are atomic
        * and non-concurrent
        */
        editor = settings.edit();    
   }
   //...
}

其中User代碼如下:

/** User object to be saved in db */
public class User{

    private int id; // used for object storage
    private String userName;
    private boolean registered;
    private double score;


 
    /** Constructor */
   public User(int id, String userName, boolean registered, double score){
       this.id = id;
       this.userName = userName;
       this.registered = registered;
       this.score = score;
   }
   // getters and setters here...
}

SharedPreferences看成一個Map存儲,

CRUD操作如下:

/** generic field keys */
 private static final String KEY_USERNAME = "com.our.package.KEY_USERNAME";
 private static final String KEY_REGISTERED = "com.our.package.KEY_REGISTERED";
 private static final String KEY_SCORE = "com.our.package.KEY_SCORE";

/** Store or Update */
public void setUser(User user){
    if(user == null)
      return; // don't bother


 
    int id = user.getId();
    editor.putString(
               getFieldKey(id, KEY_USERNAME),
               user.getUsername() );
    editor.putBoolean(
               getFieldKey(id, KEY_REGISTERED),
               user.isRegistered() );
    editor.putFloat(
               getFieldKey(id, KEY_SCORE),
               user.getScore() );

    editor.commit();
}

/** Retrieve */
public User getUser(int id){
    String name = settings.getString(
                  getFieldKey(id, KEY_USERNAME),
                  "" ); // default value
    boolean registered =  settings.getBoolean(
                 getFieldKey(id, KEY_REGISTERED),
                 false); // default value
    double score =  settings.getFloat(
                 getFieldKey(id, KEY_SCORE),
                 0); // default value

    return new User(id, name, registered, score);
}

/** Delete */
public void deleteUser(User user){
   if(user == null)
      return; // don't bother

   int id = user.getId();
   editor.remove( getFieldKey(id, KEY_USERNAME) );
   editor.remove( getFieldKey(id, KEY_REGISTERED) );
   editor.remove( getFieldKey(id, KEY_SCORE) );

   editor.commit();
}

主鍵是通過getFieldKey方法, getFieldKey() 給我們每個用戶每個字段的唯一標識。

/** The prefix for flattened user keys */
public static final String KEY_PREFIX =
            "com.our.package.KEY";

/** Method to return a unique key for any field belonging to a given object
* @param id of the object
* @param fieldKey of a particular field belonging to that object
* @return key String uniquely identifying the object's field
*/
private String getFieldKey(int id, String fieldKey) {
       return  KEY_PREFIX + id + "_" + fieldKey;
}

客戶端調(diào)用如下:

// get a SharedPreferences instance
UserPrefs prefs = new UserPrefs( this.getApplicationContext() );

// get id from server or local storage
// then find User with that id
User user = prefs.getUser(id);

// operations on User, e.g.
user.setRegistered(true);
user.setScore(new_score);

// save
prefs.setUser(user);
// ...or delete
prefs.deleteUser(user),

 Gson

Gson 是一個Java庫,它提供了簡單的toJSON()fromJson()方法來轉(zhuǎn)換Java對象到JSON格式,反之亦然。我們可以簡單地存儲JSON格式整個字符串到SharedPreferences

 // convert User object user to JSON format
Gson gson = new Gson();
String user_json = gson.toJson(user);

// store in SharedPreferences
String id = "" + user.getId(); // get storage key
editor.putString(id, user_json);
editor.commit();

// time flies...

// do the reverse operation
user_json = settings.getString(id, "");
user = gson.fromJson(user_json, User.class);

到此這篇關(guān)于使用SharedPreferences在Android存儲對象詳細代碼的文章就介紹到這了,更多相關(guān)使用SharedPreferences在Android存儲對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 中讀取SD卡文件時拋出NullPointerException錯誤解決辦法

    Android 中讀取SD卡文件時拋出NullPointerException錯誤解決辦法

    這篇文章主要介紹了Android 中讀取SD卡文件時拋出NullPointerException錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android自定義view之仿支付寶芝麻信用儀表盤示例

    Android自定義view之仿支付寶芝麻信用儀表盤示例

    本篇文章主要介紹了Android自定義view之仿支付寶芝麻信用儀表盤,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • Android實現(xiàn)每天定時提醒功能

    Android實現(xiàn)每天定時提醒功能

    本文主要介紹了Android每天定時提醒功能、定時功能、鬧鐘的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-04-04
  • android繪制幾何圖形的實例代碼

    android繪制幾何圖形的實例代碼

    這篇文章主要為大家詳細介紹了android繪制幾何圖形的實例代碼 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android實現(xiàn)百分比下載進度條效果

    Android實現(xiàn)百分比下載進度條效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)百分比下載進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Flutter仿釘釘考勤日歷的示例代碼

    Flutter仿釘釘考勤日歷的示例代碼

    這篇文章主要介紹了Flutter仿釘釘考勤日歷的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Android二維碼創(chuàng)建實例

    Android二維碼創(chuàng)建實例

    這篇文章主要介紹了Android二維碼創(chuàng)建實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Android 一個日歷控件的實現(xiàn)代碼

    Android 一個日歷控件的實現(xiàn)代碼

    本篇文章主要介紹了Android 一個日歷控件的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Android WebView的使用方法及與JS 相互調(diào)用

    Android WebView的使用方法及與JS 相互調(diào)用

    這篇文章主要介紹了Android WebView的使用方法及與JS 相互調(diào)用的相關(guān)資料,WebView 是 Android 中一個非常實用的組​件, WebView 可以使得網(wǎng)頁輕松的內(nèi)嵌到app里,還可以直接跟js相互調(diào)用,需要的朋友可以參考下
    2017-07-07
  • Kotlin?泛型邊界型變及星投影使用詳解

    Kotlin?泛型邊界型變及星投影使用詳解

    這篇文章主要為大家介紹了Kotlin?泛型邊界型變及星投影使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論