zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    张小龙:微信十周年总结
    天呐!!!竟还有人不知道如何将Python程序打包成exe
    Making Games with Python & Pygame 中文翻译
    turtle怎么引入背景图片
    Python少儿编程全集(一):一只小海龟(turtle库的使用)
    C/C++基础编程
    少儿编程论坛,汇集所有少儿编程资源!!!
    少儿编程:认识python中的turtle库(一)
    博客导航栏,衣渐衫衣终不悔,沉淀技术这十年(持续更新...)
    SpringBoot学习笔记【尚硅谷】
  • 原文地址:https://www.cnblogs.com/huolongluo/p/5899035.html
Copyright © 2011-2022 走看看