创建类
package com.example.sharepreference;
import java.io.Serializable;
import android.R.string;
public class Product implements Serializable{
public String name;
public int price;
}
package com.example.sharepreference;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.util.Base64;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private Button button1;
private Button button2;
private Button button3;
private Button button4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
button3=(Button)findViewById(R.id.button3);
button4=(Button)findViewById(R.id.button4);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
//获取 SharedPreferences 对象
SharedPreferences sharedPreferences=getSharedPreferences("test", Activity.MODE_PRIVATE);
//获取SharedPreferences.Editor 对象
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("name", "Tom");
editor.putString("address", "BeiJing");
//执行 将数据保存在文件中
editor.commit();
//获取数据
String name=sharedPreferences.getString("name", "");
String address=sharedPreferences.getString("address", "");
System.out.println("name:"+name+",address:"+address);
//数据的存储位置和格式
/**
* SharedPreferences 将数据文件写在手机内存ROM私有的目录中,在模拟器中测试程序
* 通过DDMS透视图来查看数据文件的位置。打开DDMS透视图,进入“File Explorer”视图,
* 找到data/data目录 ... 在shared——prefs下
*
*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
* 保存图片
*/
private void saveImage()
{
/**
* SharedPreferences 存取更复杂的数据类型(对象、图片等)就需要对这些数据记性编码。通常将复杂类型的数据转换
* 成Base64格式的编码,然后将转换后的数据义字符串的形式保存在xml文件中。
*/
try {
SharedPreferences mySharedPreferences=getSharedPreferences("base64", Activity.MODE_PRIVATE);
Editor editor1=mySharedPreferences.edit();
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//读取和压缩qq.png,并将其压缩结果保存在ByteArrayOutputStream对象中
BitmapFactory.decodeResource(getResources(), R.drawable.qq).compress(CompressFormat.JPEG, 50, baos);
//对压缩后的字节进行base64编码
String imageBase64=new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));
//保存转换后的Base64格式字符串
editor1.putString("image", imageBase64);
editor1.commit();
baos.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 读取文件中图片方法
*/
private void getImage()
{
//下面代码从base64.xml文件中读取以保存的图像,并将其显示在ImageView控件中
try {
SharedPreferences mySharedPreference=getSharedPreferences("base64", Activity.MODE_PRIVATE);
//读取Base64格式的图像数据
String image=mySharedPreference.getString("image", "");
//对Base64格式的字符串进行解码,还原成字节数组
byte[] imageBytes=Base64.decode(image.getBytes(), Base64.DEFAULT);
ByteArrayInputStream bais=new ByteArrayInputStream(imageBytes);
ImageView imageView=(ImageView)findViewById(R.id.imageView1);
imageView.setImageDrawable(Drawable.createFromStream(bais, "image"));
bais.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 存储对象
*/
private void saveObject()
{
/*
* 存取对象的代码与存取图像的代码类似,首先这个对象必须可序列化(对应的类实现java.io.Serilizable接口),
* 然后需要将这个可序列化的对象转换成字节数组,并进一步编码成Base64格式的字符串
*/
try {
Product product=new Product();
product.name="iPhone";
product.price=4998;
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(baos);
//将对象保存在ObjectOutputStream 对象中
oos.writeObject(product);
SharedPreferences mySharedPreferences=getSharedPreferences("base641", Activity.MODE_PRIVATE);
Editor editor=mySharedPreferences.edit();
// mySharedPreferences=getSharedPreferences("base64", Activity.MODE_PRIVATE);
//将Product对象转换成byte数组,并将其进行base64编码
String producteBase64=new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));
//将编码后的字符串保存到base64.xml文件中
editor.putString("product", producteBase64);
editor.commit();
oos.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 读取对象
*/
private void getObject()
{
try {
SharedPreferences mySharedPreferences=getSharedPreferences("base641", Activity.MODE_PRIVATE);
//从base64.xml文件中读取product对象的base64格式字符串
String base64Proudct=mySharedPreferences.getString("product", "");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//将字base64 格式字符串还原成byte数组
byte[] productByte=Base64.decode(base64Proudct.getBytes(), Base64.DEFAULT);
ByteArrayInputStream bais=new ByteArrayInputStream(productByte);
ObjectInputStream ois=new ObjectInputStream(bais);
//将byte数组转化成Product对象
Product product=(Product)ois.readObject();
String name=product.name;
int price=product.price;
Toast.makeText(this, "name:"+name+", price:"+price, Toast.LENGTH_SHORT).show();
ois.close();
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.button1://获取图片
getImage();
break;
case R.id.button2://存储图片
saveImage();
break;
case R.id.button3://存储对象
saveObject();
break;
case R.id.button4://获取对象
getObject();
break;
default:
break;
}
}
}