怎样使用SharedPrefences来存储对象
来源:互联网 发布:python帮助文档的使用 编辑:程序博客网 时间:2024/05/18 03:31
一般使用Sharedprefences存储的都是基本类型的数据,但遇到需要存储整个对象的时候,分开存储是可以的,但是很麻烦,也会记不清楚。
那么可以使用将对象序列化成一个String数据类型存储在SharedPrefences里,需要这个对象数据的时候在反序列化存储在SharedPrefences的String数据,就得到了这个存储的对象。
首先将需要存储的对象实现 Serializable ,表示这个对象是可序列化的。
我这里存储User这个对象
public class User implements Serializable{ private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
第一步,saveobject:
saveObject(serialize(user),getApplicationContext(),USER);
第二步,取对象:
deSerialization(getObject(getApplicationContext(),USER))
那么,User对象就被SharedPrefences存储到一个手机里。
全部代码:
package com.zhangli.saveobject;import android.content.Context;import android.content.SharedPreferences;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.Button;import android.widget.TextView;import com.zhangli.fingerprint.R;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import butterknife.ButterKnife;import butterknife.InjectView;import butterknife.OnClick;public class MainActivity extends AppCompatActivity { @InjectView(R.id.save_button) Button save_button; @InjectView(R.id.save_text) TextView save_text; @InjectView(R.id.get_button) Button get_button; @InjectView(R.id.get_text) TextView get_text; private User user; private static String USER="user"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_layout); ButterKnife.inject(this); user=new User(); user.setId(999); user.setName("zhangli"); } @OnClick(R.id.save_button) void saveClick(){ try { saveObject(serialize(user),getApplicationContext(),USER); save_text.setText("存入对象的id:"+user.getId()+",名字:"+user.getName()); } catch (IOException e) { e.printStackTrace(); } } @OnClick(R.id.get_button) void getClick(){ try { User newUser= (User) deSerialization(getObject(getApplicationContext(),USER)); get_text.setText("得到对象的id:"+newUser.getId()+",名字:"+newUser.getName()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 序列化对象 * * @param person * @return * @throws IOException */ public static String serialize(Object person) throws IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(person); String serStr = byteArrayOutputStream.toString("ISO-8859-1"); serStr = java.net.URLEncoder.encode(serStr, "UTF-8"); objectOutputStream.close(); byteArrayOutputStream.close(); return serStr; } /** * 反序列化对象 * * @param str * @return * @throws IOException * @throws ClassNotFoundException */ public static Object deSerialization(String str) throws IOException, ClassNotFoundException { String redStr = java.net.URLDecoder.decode(str, "UTF-8"); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(redStr.getBytes("ISO-8859-1")); ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); Object person = objectInputStream.readObject(); objectInputStream.close(); byteArrayInputStream.close(); return person; } /** * 存对象 * * @param strObject 对象 * @param context * @param name 存储名 */ public static void saveObject(String strObject, Context context, String name) { SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE); SharedPreferences.Editor edit = sp.edit(); edit.putString(name, strObject); edit.commit(); } /** * 取对象 * * @param context * @param name 存储名 * @return */ public static String getObject(Context context, String name) { SharedPreferences sp = context.getSharedPreferences(name, Context.MODE_PRIVATE); return sp.getString(name, ""); }}
demo:https://git.oschina.net/zhanglihow/SaveObjectDemo
0 0
- 怎样使用SharedPrefences来存储对象
- SharedPrefences存储方式及使用模块
- 文件存储之SharedPrefences
- SharedPrefences的使用
- SharedPrefences的使用
- SharedPrefences
- 使用Redis Hash结构来存储对象,更改有限字段;
- 怎样使用JSON对象
- 用Cookie来存储对象
- SharedPrefences小结
- 怎样使用eclipse来开发android源码
- 怎样使用类来实现网络服务
- 怎样使用Eclipse来开发Android源码
- 怎样使用Eclipse来开发Android源码
- 怎样使用Eclipse来开发Android源码
- 怎样使用eclipse来开发android源码
- 怎样使用Eclipse来开发Android源码
- 怎样使用Eclipse来开发Android源码
- JDBC 之 连接DataBase
- 图论学习心得
- 求“最大连续段和”题目分析
- PreparedStatement之安全问题
- jdb编程
- 怎样使用SharedPrefences来存储对象
- $scope.$wtach 监听ionic滑动盒子索引值失效原因
- JDBC连接关闭之工具类
- hdoj 2072 单词数 (map)
- objective-c的NSMutableDictionary增改删测试
- golang 读取execl数据
- 【php中的curl】php中curl的详细解说
- Ubuntu系统学习笔记-2.LNMP环境搭建
- Navicat将远程MySql数据库数据导入本地