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>
原文地址:https://www.cnblogs.com/huolongluo/p/5899035.html