通过SharedPreferences方式存储复杂数据

发布时间:2021-11-30 02:03:34

?? 我们可以通过SharedPreferences方式存储一些复杂的数据,如图片或类的存储,(当然,建议不要用这种方式存储)下面我们通过代码来学*:


??? @Override


??? public void onCreate(Bundle savedInstanceState)


??? {


??????? super.onCreate(savedInstanceState);


???????


??????? setContentView(R.layout.fuza_sharedpref);


???????


??????? Button save = (Button) findViewById(R.id.save);


??????? Button selectImage = (Button) findViewById(R.id.selectImage);


???????


??????? studentID = (EditText) findViewById(R.id.studentID);


??????? studentName = (EditText) findViewById(R.id.studentName);


???????


??????? imageView = (ImageView) findViewById(R.id.imageview);


???????


??????? save.setOnClickListener(this);


??????? selectImage.setOnClickListener(this);


???????


??????? init();


???????


??????? enumerateImage();


??? }


? ????


? ???? /**


? ???? ?* 第一次运行ObjectInputStream objectIs = new ObjectInputStream(byteArray)会抛异常


? ???? ?*/


? ???? public void init()


? ???? {


? ???? ????byte[] base64Bytes;


??????? ByteArrayInputStream byteArray;


??????? try


??????? {


??????????? mySharedPreferences = getSharedPreferences(name_sharedP,Activity.MODE_PRIVATE);


??????????? //获取存储在xml文件中的Base64编码的字符串


??????????? String studentBase64 = mySharedPreferences.getString("student", "");


??????????? //解码


??????????? base64Bytes = Base64.decode(studentBase64.getBytes(),Base64.DEFAULT);


???????????


??????????? byteArray = new ByteArrayInputStream(base64Bytes);


??????????? ObjectInputStream objectIs = new ObjectInputStream(byteArray);


??????????? //获取student对象


??????????? Student student = (Student) objectIs.readObject();


??????????? studentID.setText(student.getId());


??????????? studentName.setText(student.getName());


???????????


??????????? //获取student头像


??????????? String imageBase64 = mySharedPreferences.getString("studentImage","");


???????????


??????????? base64Bytes = Base64.decode(imageBase64.getBytes(),Base64.DEFAULT);


???????????


??????????? byteArray = new ByteArrayInputStream(base64Bytes);


??????????? //利用Drawable创建图像


??????????? imageView.setImageDrawable(Drawable.createFromStream(byteArray,"student_image"));


?????


??????????? objectIs.close();


??????????? byteArray.close();


???????????


??????? }


??????? catch (Exception e)


??????? {


??????????? System.out.println("---init-e=" + e);


??????? }


? ???? }


? ????


? ???? /**


? ???? ?* 枚举图片,利用java的反射技术,枚举R.drawable类中所有的Field,获取所有Field的值


? ???? ?* 如此一来,再添加新的图片或删除图片时,程序并不需要修改,就可以显示最新的图片列表


? ???? ?*/


? ???? public void enumerateImage()


? ???? {


? ???? ????try


? ???? ????{


? ???? ????????Field[] fields = R.drawable.class.getDeclaredFields();


? ???? ????????for(Field field : fields)


? ???? ????????{


? ???? ????????????if(!"icon".equals(field.getName()) && !"browser1".equals(field.getName()) && !"browser2".equals(field.getName())


? ???? ????????????????????&& !"browser".equals(field.getName()))


? ???? ????????????{


? ???? ????????????????imageList.add(field.getInt(R.drawable.class));


? ???? ????????????}


? ???? ????????}


? ???? ????????System.out.println("---size-=" + imageList.size());


? ???? ????}catch(Exception e)


? ???? ????{


? ???? ????????System.out.println("---enumerateImage-e=" + e);


? ???? ????}


? ???? }


? ????


? ????


??? @Override


??? public void onClick(View v)


??? {


??????? try


??????? {


??????????? switch (v.getId())


??????????? {


??????????????? case R.id.save:


???????????????????


??????????????????? savaInfo();


??????????????????? break;


??????????????? case R.id.selectImage:


???????????????????


??????????????????? selectImage();


??????????????? ????break;


??????????? }


???


??????? }catch(Exception e)


??????? {


??????????? setTitle("---error:" + e.getMessage());


??????????? System.out.println("---onClick-init-e=" + e);


??????? }


??? }


???


??? /**


???? * 保存所有信息


???? * @throws Exception


???? */


??? public void savaInfo() throws Exception


??? {


??????? Student student = new Student();


??????? student.setId(studentID.getText().toString());


??????? student.setName(studentName.getText().toString());


???????


??????? ByteArrayOutputStream baos = new ByteArrayOutputStream();


?


??????? ObjectOutputStream oos = new ObjectOutputStream(baos);


??????? oos.writeObject(student);


???????


??????? //获取SharedPreferences对象


??????? mySharedPreferences = getSharedPreferences(name_sharedP,Activity.MODE_PRIVATE);


??? ????//Base64编码


??????? String studentBase64 = new String(Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT));


???????


??????? SharedPreferences.Editor editor = mySharedPreferences.edit();


??????? editor.putString("student", studentBase64);


????????????


??????? baos = new ByteArrayOutputStream();


??????? //将图片压缩成JPEG各式,并保存在baos流中,


??????? //50表示压缩质量,取值范围是0~100,0表示最高的压缩比,但图像效果最差


??????? ((BitmapDrawable) imageView.getDrawable()).getBitmap().compress(CompressFormat.JPEG, 50, baos);


???????


??????? String imageBase64 = new String(Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT));


???????


??????? editor.putString("studentImage", imageBase64);


??????? //提交保存


??????? editor.commit();


???????


??????? oos.close();


??????? baos.close();


???????


??????? new AlertDialog.Builder(this).setTitle("保存成功.").setPositiveButton("确定", null).show();


??? }


???


??? public void selectImage()


??? {


??????? View myView = getLayoutInflater().inflate(R.layout.gallery,null);


??????? final Gallery gallery = (Gallery) myView.findViewById(R.id.gallery);


???????


??????? ImageAdapter imageAdapter = new ImageAdapter(this);


??????? gallery.setAdapter(imageAdapter);


?


??????? new AlertDialog.Builder(this)


??????????? .setTitle("选择头像")


??????????? .setView(myView)


??????????? .setPositiveButton("确定",


??????????????????? new android.content.DialogInterface.OnClickListener()


??????????????????? {


????????????????????? @Override


????????????????????? public void onClick(DialogInterface dialog,int which)


?????????????? ???????{


??????????????????????? imageView.setImageResource(imageList.get(gallery.getSelectedItemPosition()));


????????????????????? }


??????????????????? }).setNegativeButton("取消", null).show();


??? }


???


??? /**


???? * 内部类


???? * @author wanglejun


???? */


? ???? public class ImageAdapter extends BaseAdapter


? ???? {


??? ?????????? int mGalleryItemBackground;


??? ?????????? private Context mcontext;


???


??? ?????????? public ImageAdapter(Context context)


??? ?????????? {


??? ?????????? ????mcontext = context;


??? ?????????? ????//TypedArray是一个数组容器


????? ???????????????????????? TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery1);


????? ???????????????????????? //防止在XML文件里没有定义,加上了默认值0. 获取里面属性用<名字_ 属性>连接起来


????? ???????????????????????? mGalleryItemBackground = typedArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);


??? ?????????? }


???


??? ?????????? public int getCount()


??? ?????????? {


??? ??????????????????? return imageList.size();


??? ?????????? }


???


??? ?????????? public Object getItem(int position)


??? ?????????? {


??? ??????????????????? return position;


??? ?????????? }


???


??? ?????????? public long getItemId(int position)


??? ?????????? {


??? ??????????????????? return position;


??? ?????????? }


???


??? ?????????? public View getView(int position, View convertView, ViewGroup parent)


??? ?????????? {


????? ???????????????????????? ImageView imageView = new ImageView(mcontext);


?????


????? ???????????????????????? imageView.setImageResource(imageList.get(position));


????? ???????????????????????? imageView.setScaleType(ImageView.ScaleType.FIT_XY);


????? ???????????????????????? imageView.setLayoutParams(new Gallery.LayoutParams(136, 120));


????? ???????????????????????? imageView.setBackgroundResource(mGalleryItemBackground);


????? ???????????????????????? return imageView;


??? ?????????? }


? ??? }

相关文档

  • 糯米什么人不能吃
  • 骆驼祥子好句好段
  • soloπ初体验
  • 2018女生考军校有什么要求报考军校流程
  • QuartusII逻辑分析仪Signaltap使用
  • 电车充电器充满后灯全灭
  • 2021-02-23 js 去重处理函数
  • 衣柜合理设计效果图片欣赏
  • 穿条纹睡衣的男孩影评700字
  • 走字的笔顺正确写法
  • 哪些事情让你感到缘分妙不可言让你感到缘分妙不可言的事盘点
  • 题目推荐?BZOJ 水题推荐
  • 白化病什么原因
  • 骑鹅旅行记读后感范文精选
  • 火星文非主流个性签名
  • 如何正确应对学习中的困难
  • 超六成90后有创业意愿;星巴克中国升级星享俱乐部会员制度 | 美通企业日报...
  • windows安装eclipse/paho.mqtt.golang
  • 秋季养生如何调理身体
  • Redis之事务(详细解析)
  • 秋季药膳之:萝卜大PK
  • Android Framework - 开机启动 SystemServer 进程
  • Linux多进程编程
  • 关于历史的趣味书籍
  • 小公司保持企业活下去的方法有哪些
  • HTML常用的标签中,行内元素和块级元素
  • 学习汽车变速箱漏油原因
  • 安全员的月度总结范文
  • 早泄的中药外治法
  • 关于谷歌chrome浏览器以及360极速浏览器摄像头无法使用(摄像头权限)问题。
  • 猜你喜欢

  • 上海潮超服饰有限公司企业信用报告-天眼查
  • 微生物技术在矿区复垦中的应用
  • 初级药师模试考试基础知识分析
  • 2018年贵州公务员考试行测真题及答案
  • 保险公司内勤2018年度工作总结与保险公司内勤年度工作总结汇编
  • 精品--2016年聚四氟乙烯微粉行业分析报告
  • 呼图壁县五工台镇新跃劳务服务农民专业合作社企业信用报告-天眼查
  • IMX8M M4开发流程
  • 图论:最短路径_Bellman-Ford算法
  • 2012学年度第一学期期中数学七年级四校联考答题纸
  • 电子教案单元分析模板word版
  • “班班通”设备使用注意事项
  • 激励中考的座右铭
  • 复印机维护常识和技巧
  • mongoDB的基础知识点总结
  • 浅谈如何控制高血压 ppt课件
  • JX1021TS3轻型货车驱动桥设计-任务书
  • 精华学期学习计划汇总十篇
  • 2018年中国保险行业分析及发展趋势预测(目录)
  • 浅谈环向预应力张拉施工控制
  • 高清摄像机拍摄技巧
  • 四级句子模型
  • LSTM模型对时间序列预测分析
  • 顺丰快递能到陕西咸阳三原县吗
  • 遵纪守法,做守法公民 国旗下讲话
  • 部编人教版九年级下册语文:第18课《天下第一楼》ppt课件
  • 医学-*回收技术的临床应用
  • 持久化数据&缓存数据双写一致性
  • 活动计划总结-3.15消费者权益日活动总结精选 精品
  • 菏泽市牡丹区高庄粮食管理所企业信用报告-天眼查
  • 做一个幸福的人作文写作指导-作文
  • 第8章_柴油发动机构造与维修分析
  • 探讨关于工民建施工技术的管理措施
  • 关于秘密的作文350字优秀作文
  • 武汉环宇伟业广告传媒有限公司企业信息报告-天眼查
  • 羊肝和猪肝哪个好来看详细对比
  • 铝电极箔材料项目投资申请报告
  • 浅谈在数学教学中如何发挥学生的主观能动性
  • 001工程地质学-绪论001共47页PPT资料
  • 抖音上恢复聊天记录
  • 福建师范大学生物化学期末试卷3答案
  • 重庆市坎庄农业科技有限公司企业信用报告-天眼查
  • 电脑版