您的位置:首页 > 移动开发 > Android开发

android sharedpreference保存boolean,int,float,long,String和图片的使用方法及实例(附快速使用类文件)

2015-03-04 16:24 651 查看
  hello,大家好,今天上传一下本人对于android 中sharedpreference的理解,以及自己使用的一个Demo的讲解。

   

SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:

  一、根据Context获取SharedPreferences对象

  二、利用edit()方法获取Editor对象。

  三、通过Editor对象存储key-value键值对数据。

  四、通过commit()方法提交数据。

SharedPreferences相对于sqllite使用起来相当方便,但是SharedPreferences也只能存储boolean,int,float,long和String五种简单的数据类型,本文在上述五种类型的基础上增加了图片的保存,并将其封装成了一个可以快速使用的java类,下面进行代码的展示跟演示:

PreferencesUtils.java文件:

其中将SharedPreferences的五种类型以及图片的读取和存储都写好了,使用时可直接引入到项目中进行快速开发。

package com.example.sharedpreferencedtestdemo;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Base64;

public class PreferencesUtils {

public static String PREFERENCE_NAME = "TrineaAndroidCommon";

/**
* put string preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putString(Context context, String key, String value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value);
return editor.commit();
}

/**
* get string preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or null. Throws ClassCastException if there is a preference with this
* name that is not a string
* @see #getString(Context, String, String)
*/
public static String getString(Context context, String key) {
return getString(context, key, null);
}

/**
* get string preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a string
*/
public static String getString(Context context, String key, String defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getString(key, defaultValue);
}

/**
* put int preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putInt(Context context, String key, int value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(key, value);
return editor.commit();
}

/**
* get int preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
* name that is not a int
* @see #getInt(Context, String, int)
*/
public static int getInt(Context context, String key) {
return getInt(context, key, -1);
}

/**
* get int preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a int
*/
public static int getInt(Context context, String key, int defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getInt(key, defaultValue);
}

/**
* put long preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putLong(Context context, String key, long value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(key, value);
return editor.commit();
}

/**
* get long preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
* name that is not a long
* @see #getLong(Context, String, long)
*/
public static long getLong(Context context, String key) {
return getLong(context, key, -1);
}

/**
* get long preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a long
*/
public static long getLong(Context context, String key, long defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getLong(key, defaultValue);
}

/**
* put float preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putFloat(Context context, String key, float value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putFloat(key, value);
return editor.commit();
}

/**
* get float preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
* name that is not a float
* @see #getFloat(Context, String, float)
*/
public static float getFloat(Context context, String key) {
return getFloat(context, key, -1);
}

/**
* get float preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a float
*/
public static float getFloat(Context context, String key, float defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getFloat(key, defaultValue);
}

/**
* put boolean preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static boolean putBoolean(Context context, String key, boolean value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(key, value);
return editor.commit();
}

/**
* get boolean preferences, default is false
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this
* name that is not a boolean
* @see #getBoolean(Context, String, boolean)
*/
public static boolean getBoolean(Context context, String key) {
return getBoolean(context, key, false);
}

/**
* get boolean preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
* this name that is not a boolean
*/
public static boolean getBoolean(Context context, String key, boolean defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getBoolean(key, defaultValue);
}

/**
* get picture preferences
*
* @param context
* @param key The name of the preference to retrieve
* @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this
* name that is not a picture
*/
public static Drawable getPicture(Context context,String key){
return getPicture(context, key,"");
}

/**
* get picture preferences
*
* @param context
* @param key The name of the preference to retrieve
* @param defaultValue Value to return if this preference does not exist
* @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this
* name that is not a picture
*/
public static Drawable getPicture(Context context,String key,String defaultValue){
SharedPreferences settings=context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
String srcName=settings.getString(key, defaultValue);
byte[] base64Bytes = Base64.decode(srcName, 1);
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
return Drawable.createFromStream(bais, srcName);
}

/**
* put picture preferences
*
* @param context
* @param key The name of the preference to modify
* @param value The new value for the preference
* @return True if the new values were successfully written to persistent storage.
*/
public static Boolean putPicture(Context context,String key,Drawable value){
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
((BitmapDrawable) value).getBitmap().compress(CompressFormat.JPEG, 100, baos);
String srcName = new String(Base64.encodeToString(
baos.toByteArray(), 1));
editor.putString(key, srcName);
return editor.commit();

}
}


在Demo中我选择进行了String,Boolean(个人理解用来保存开关之类的比较方便),图片三种比较常用的保存。

下面是Demo的XML文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<EditText
android:id="@+id/edt_string"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="请输入要保存的内容" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal" >

<TextView
android:id="@+id/txt_boolen"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:text="现在是True" />

<Button
android:id="@+id/changeBool"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:onClick="changeBool"
android:text="chanageBool"
android:textSize="12sp" />
</LinearLayout>

<ImageView
android:id="@+id/customer_img_shop"
android:layout_width="100dp"
android:layout_height="100dp"
android:clickable="true"
android:onClick="changepicture"
android:src="@drawable/nopicture" />

<Button
android:id=
d123
"@+id/save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="save"
android:text="采用SharedPreference保存上述类容" />

<Button
android:id="@+id/read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="read"
android:text="采用SharedPreference读出上述类容"/>

</LinearLayout>

以及Demo的MainActivity文件,其中由于要保存图片,于是加了一个拍照和读取本地文件的功能,有需要的朋友也可以看看,没需要的朋友就可以直接略过了。

MainActivity.java:

package com.example.sharedpreferencedtestdemo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private Boolean nowBoolean=true;
private EditText edt_string;
private TextView txt_boolen;
private TextView take_picture_tv;
private TextView gallery_tv;
private String ImageName;
private static final int REQUESTCODE_TAKEPICTURE = 1;
private static final int REQUESTCODE_PICTUREROOM = 2;
private static final int REQUESTCODE_TAKEPICTURE_CUT = 3;
private String imagepath = "image/*";
private Bitmap tmpBitmap;
private ImageView customer_img_shop;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt_boolen=(TextView) findViewById(R.id.txt_boolen);
edt_string=(EditText) findViewById(R.id.edt_string);
customer_img_shop=(ImageView) findViewById(R.id.customer_img_shop);
}

//将当前Bool值置反
public void changeBool(View view){
if (nowBoolean==true){
nowBoolean=false;
txt_boolen.setText("现在是false");
}else if (nowBoolean==false) {
nowBoolean=true;
txt_boolen.setText("现在是true");
}else {
Toast.makeText(this, "Rrror!", Toast.LENGTH_SHORT).show();
return;
}

}

//点击图片的地方选择图片
public void changepicture(View view){
takepicture();
}

//点击保存SharedPreference数据
public void save(View view){
PreferencesUtils.putBoolean(this, "Boolen", nowBoolean);
PreferencesUtils.putString(this, "String", edt_string.getText().toString());
PreferencesUtils.putPicture(this, "picture", customer_img_shop.getDrawable());
}

//点击读取已保存的SharedPreference数据
public void read(View view){
nowBoolean=PreferencesUtils.getBoolean(this, "Boolen", true);
if (nowBoolean==true){
txt_boolen.setText("现在是true");
}else if (nowBoolean==false) {
txt_boolen.setText("现在是false");
}else {
Toast.makeText(this, "Rrror!", Toast.LENGTH_SHORT).show();
return;
}
edt_string.setText(PreferencesUtils.getString(this, "String", ""));
customer_img_shop.setImageDrawable(PreferencesUtils.getPicture(this, "picture"));
}

// 选择本地照片/拍摄新的照片
private void takepicture() {

final AlertDialog imgdialog = new AlertDialog.Builder(
this).show();
imgdialog.setContentView(R.layout.settings_photo);
take_picture_tv = (TextView) imgdialog
.findViewById(R.id.take_picture_tv);
gallery_tv = (TextView) imgdialog.findViewById(R.id.gallery_tv);

// 调用相机
take_picture_tv.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
try {
ImageName = "/picture.jpg";
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(new File(Environment
.getExternalStorageDirectory(), ImageName)));

if (CommonTools.isIntentAvailable(
MainActivity.this, intent)) {
startActivityForResult(intent, REQUESTCODE_TAKEPICTURE);
} else {
Toast.makeText(MainActivity.this,
R.string.persional_information_camera_notexist,
Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}

imgdialog.dismiss();
}
});

// 从相册选择
gallery_tv.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imagepath);
startActivityForResult(intent, REQUESTCODE_PICTUREROOM);
imgdialog.dismiss();
}
});

}

// 处理图片--------------------------------------------------------------------------------

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
// 拍照
if (requestCode == REQUESTCODE_TAKEPICTURE) {
// 设置文件保存路径这里放在根目录下
File picture = new File(Environment.getExternalStorageDirectory()
+ ImageName);
startPhotoZoom(Uri.fromFile(picture));
}
if (data == null) {
return;
}
// 相册
if (requestCode == REQUESTCODE_PICTUREROOM) {
startPhotoZoom(data.getData());
}

if (requestCode == REQUESTCODE_TAKEPICTURE_CUT) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
tmpBitmap = photo;
customer_img_shop.setImageBitmap(tmpBitmap);
FileOutputStream stream = null;
try {
stream = new FileOutputStream(this.getApplicationContext()
.getFilesDir().getAbsolutePath()
+ "/shop.jpg");

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (photo != null && stream != null) {
photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
// face.setImageBitmap(photo);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}

// 处理图片的大小
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, imagepath);
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", MyTools.dip2px(this, 150));
intent.putExtra("outputY", MyTools.dip2px(this, 150));
intent.putExtra("return-data", true);

intent.putExtra("scale", true);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", false);

startActivityForResult(intent, REQUESTCODE_TAKEPICTURE_CUT);
}
}


Demo下载地址:http://download.csdn.net/detail/a332802774/8472467

希望能够帮到大家,谢谢观看!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐