SharedPreferences详解(三)——存取图片

MainActivity如下:

 1 package cc.sp;
 2
 3 import java.io.ByteArrayInputStream;
 4 import java.io.ByteArrayOutputStream;
 5 import android.os.Bundle;
 6 import android.util.Base64;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 import android.widget.ImageView;
11 import android.app.Activity;
12 import android.content.Context;
13 import android.content.SharedPreferences;
14 import android.content.SharedPreferences.Editor;
15 import android.graphics.Bitmap;
16 import android.graphics.Bitmap.CompressFormat;
17 import android.graphics.BitmapFactory;
18 /**
19  * Demo描述:
20  * 利用SharedPreferences存取图片
21  *
22  *
23  * 参考资料:
24  * 1 http://blog.csdn.net/tangnengwu/article/details/37881087
25  * 2 http://blog.csdn.net/lfdfhl/article/details/37742775
26  * 3 http://blog.csdn.net/lfdfhl/article/details/17998469
27  * 4 http://blog.csdn.net/lfdfhl/article/details/10961459
28  *   Thank you very much
29  *
30  */
31 public class MainActivity extends Activity {
32     private Button mSaveButton;
33     private Button mGetButton;
34     private ImageView mImageView;
35     @Override
36     protected void onCreate(Bundle savedInstanceState) {
37         super.onCreate(savedInstanceState);
38         setContentView(R.layout.main);
39         init();
40     }
41
42     private void init(){
43         mSaveButton=(Button) findViewById(R.id.saveButton);
44         mSaveButton.setOnClickListener(new OnClickListener() {
45             @Override
46             public void onClick(View view) {
47                 saveBitmapToSharedPreferences();
48             }
49         });
50         mGetButton=(Button) findViewById(R.id.getButton);
51         mGetButton.setOnClickListener(new OnClickListener() {
52             @Override
53             public void onClick(View view) {
54                 getBitmapFromSharedPreferences();
55             }
56         });
57         mImageView=(ImageView) findViewById(R.id.imageView);
58     }
59
60
61     /**
62      * 将Bitmap转换成字符串保存至SharedPreferences
63      *
64      * 注意:
65      * 在压缩图片至输出流时,不要选择CompressFormat.JPEG而该是PNG,否则会造成图片有黑色背景.
66      * 详见参考资料二
67      */
68     private void saveBitmapToSharedPreferences(){
69         Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
70         //第一步:将Bitmap压缩至字节数组输出流ByteArrayOutputStream
71         ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
72         bitmap.compress(CompressFormat.PNG, 80, byteArrayOutputStream);
73         //第二步:利用Base64将字节数组输出流中的数据转换成字符串String
74         byte[] byteArray=byteArrayOutputStream.toByteArray();
75         String imageString=new String(Base64.encodeToString(byteArray, Base64.DEFAULT));
76         //第三步:将String保持至SharedPreferences
77         SharedPreferences sharedPreferences=getSharedPreferences("testSP", Context.MODE_PRIVATE);
78         Editor editor=sharedPreferences.edit();
79         editor.putString("image", imageString);
80         editor.commit();
81     }
82
83
84     /**
85      * 从SharedPreferences中取出Bitmap
86      */
87     private void getBitmapFromSharedPreferences(){
88         SharedPreferences sharedPreferences=getSharedPreferences("testSP", Context.MODE_PRIVATE);
89         //第一步:取出字符串形式的Bitmap
90         String imageString=sharedPreferences.getString("image", "");
91         //第二步:利用Base64将字符串转换为ByteArrayInputStream
92         byte[] byteArray=Base64.decode(imageString, Base64.DEFAULT);
93         ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArray);
94         //第三步:利用ByteArrayInputStream生成Bitmap
95         Bitmap bitmap=BitmapFactory.decodeStream(byteArrayInputStream);
96         mImageView.setImageBitmap(bitmap);
97     }
98
99 }

activity_main.xml如下:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5    >
 6
 7     <Button
 8         android:id="@+id/saveButton"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:text="保存图片到SharedPreferences"
12         android:layout_centerHorizontal="true"
13         android:layout_marginTop="25dip"/>
14
15      <Button
16         android:id="@+id/getButton"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:text="从SharedPreferences获取图片"
20         android:layout_centerHorizontal="true"
21         android:layout_marginTop="80dip"/>
22
23
24      <ImageView
25         android:id="@+id/imageView"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:layout_centerInParent="true"
29         />
30
31 </RelativeLayout>
时间: 2024-10-12 14:13:53

SharedPreferences详解(三)——存取图片的相关文章

Android基础入门教程——8.3.6 Paint API之—— Xfermode与PorterDuff详解(三)

Android基础入门教程--8.3.6 Paint API之-- Xfermode与PorterDuff详解(三) 标签(空格分隔): Android基础入门教程 本节引言: 上一节,我们学习了Xfermode中的三儿子:PorterDuffXfermode构造方法中的为一个参数: PorterDuff.Mode,我们在观看了16种图片混排模式后,又自己写代码来验证了一下文档中 18种不同的混排模式,18种是新增了ADD和OVERLAY两种模式!当然,仅仅验证知道是不够的, 本节我们来写个例子

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

php学习之道:WSDL详解(三)

通过声明方式定义绑定(binding)属性 如果你在服务中采用SOAP binding,你可以使用JAX-WS来指定一定数量的属性binding.这些属性指定对应你在WSDL中指定的属性.某些设置,比如参数类型,可以约束你实现的方法,这些设置也影响声明的效用. @SOAPBinding声明,定义在javax.jws.soap.SOAPBinding接口中.它提供发布时的SOAP Binding细节.如果@SOAPBinding没有被指定,则用缺省的doc/literal SOAPBinding.

UINavigationController详解三(转)ToolBar

原文出自:http://blog.csdn.net/totogo2010/article/details/7682641,特别感谢. 1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [self.navigationController  setToolbarHidden:NO animated:YES]; 2.在ToolBar上添加UIBarBut

logback -- 配置详解 -- 三 -- &lt;encoder&gt;

附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appender> logback -- 配置详解 -- 三 -- <encoder> logback -- 配置详解 -- 四 -- <filter> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

LinearLayout详解三:LayoutInflater创建View过程分析

项目人力资源管理主要有以下几个过程: 编制人力资源管理计划 组建项目团队 建设项目团队 项目团队管理 编制人力资源管理计划 根据什么来编? 直观点就是你要干什么事?干这些事有哪些制约? 这个说起来好像和没说一样,但就我自己做的一些项目来说,有以下困难: 1> 项目前期需求是不具体不明确的 这样直接导致你做项目计划时WBS也是不明确的,进而你细化不了活动,自然你也没法 明确活动需要什么样的人. 这个时候怎么办? 就我个人而言,有2种员工很喜欢: 1> 数学思维强的, 注意不是会做高数题,是指给你

SharedPreferences详解(一)——基础知识

我们在开发软件的时候,常需要向用户提供软件参数设置功能,例如我们常用的微信,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是在window下通常我们会采用ini文件进行保存.如果是J2EE下面,我们会采用properties属性文件或者xml进行保存.在我们的Android应用中又适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级应用程序内部轻量级的存储方案,特别适合用于保存软件配置参数,比如bool

WebSocket安卓客户端实现详解(三)–服务端主动通知

WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 WebSocket安卓客户端实现详解(二)–客户端发送请求 终于是最后一篇啦,有点激动\ ( ≧▽≦ ) /啦啦啦, 服务端主动通知 热身完毕,我们先回顾下第一篇中讲到的服务端主动通知的流程 根据notify中事件类型找到对应的处理类,处理对应逻辑. 然后用eventbus通知对应的ui界面更新. 如果

Spring4.0MVC学习资料,ApplicationContext中的方法详解(三)

做为java开源的一部分,spring框架一直排在老大的位置.Spring4.0 是 Spring 推出的一个重大版本升级,进一步加强了 Spring 作为 Java 领域第一开源平台的地位.Spring4.0 引入了众多 Java 开发者期盼的新特性,如泛型依赖注入.SpEL.校验及格式化框架.Rest风格的 WEB 编程模型等.这些新功能实用性强.易用性高,可大幅降低 JavaEE 开发的难度,同时有效提升应用开发的优雅性.为了方便开发,Spring的ApplicationContext类,