SharedPreferences存储用户自定义类

    xiaoxiao2021-12-02  29

    使用JSON和SharedPreferences存储用户自定义类

    SharedPreferences可以用来永久地存储数据,即使应用被销毁。事实上数据存储在Android的内部存储器上。

    有两种分方法用来获取SharedPreferences对象。 getSharedPreferences() - 当应用需要多个由名字区分的存储文件时,可以调用这个方法。getPreferences()-当应用只需要一个存储文件时,调用这个方法。

    使用SharedPreferences

    在SharedPreferences对象中写入数据,需要:

    1.调用edit()方法获得一个SharedPreferences.Editor对象。

    2.使用Editor对象的方法比如putBoolean()和putString()等将数据写入Editor。

    3.使用Editor对象的方法commit()或apply()将数据提交。

    读取SharedPreferences中的数据只需要调用SharedPreferences的方法如getBoolean()和getString().

    @Override protected void onCreate(Bundle state){ super.onCreate(state); . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // We need an Editor object to make preference changes. // All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Commit the edits! editor.commit(); }

    SharedPreferences的局限性在于只能存储基本类型:boolean,float,short,int,long,string等。

    如何改造让他可以存数组: SharedPreferences

    <?xml version="1.0" encoding="utf-8"?> <map> <boolean name="com.android.inputmethod.latin/.LatinIME" value="true"/> <boolean name="sound_effects" value="true"/> <string name="hdcp_checking">drm-only</string> <string name="font_size">1.0</string> <boolean name="lock_sounds" value="true"/> <boolean name="allow_mock_location" value="true"/> <boolean name="haptic_feedback" value="true"/> <boolean name="keep_screen_on" value="true"/> <boolean name="dtmf_tone" value="true"/> </map>

    通过改造实现shareprefernces存储list数据

    public List<String> getINfo() { List<String> list=new ArrayList<String>(); int size=sp.getInt(HISTORY_SIZE,0); for (int i = 0; i <size ; i++) { list.add(sp.getString(HISTORY+i,null)); } return list; } public void SaveInfo( List<String> list){ sp.putInt(HISTORY_SIZE,list.size()); for (int i = 0; i <list.size() ; i++) { sp.remove(HISTORY+i); sp.putString(HISTORY+i,list.get(i)); } }

    上面是个list数据,如果数据是List,可能就比较复杂了。 我们就需要另外一个工具,名叫json。

    类似 XML JSON 是纯文本 JSON 具有“自我描述性”(人类可读) JSON 具有层级结构(值中存在值) String的最大长度是

    json简单语法

    JSON 语法是 JavaScript 对象表示法语法的子集。

    数据在名称/值对中 “城市”:“北京”

    数据由逗号分隔

    花括号保存对象 {“城市”:“北京”,“户籍”:“南京”}

    方括号保存数组 {“employees”:[{“name”:“jack”,“age”:“13”},{“name”:“mina”,“age”:“15”}]}

    Gson 谷歌用来解析json数据的java包

    //需要存储的list User user1 = new User("jack", "123456789", "http://www.hello.com/1.png"); User user2 = new User("tom", "45467956456", "http://www.hello.com/2.png"); User user3 = new User("lily", "65465897faf", "http://www.hello.com/3.png"); ArrayList<User> users = new ArrayList<>(); users.add(user1); users.add(user2); users.add(user3); 存储方法 Gson gson = new Gson(); //list转换为json(string) String jsonStr = gson.toJson(users); sp.put(mContext, "USERS_KEY", jsonStr); 取出方法 String str = (String) SPUtils.get(mContext, "USERS_KEY", ""); users = gson.fromJson(str, new TypeToken<List<User>>() {}.getType()); for (User user : users) { if (user.getUsername().equals("jack")) { L.d(user.getProfile_pic()); } }
    转载请注明原文地址: https://ju.6miu.com/read-679788.html

    最新回复(0)