欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

Android---34---SharedPreferences,sharedpreferences

来源: 开发者 投稿于  被查看 9022 次 评论:215

Android---34---SharedPreferences,sharedpreferences


SharedPreferences 保存的数据主要是类似于配置信息格式的数据,因此他保存的数据主要是简单的 k-v 对。

 

SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下的常用方法:




SharedPreferences接口本身没有提供写入数据的能力,而是通过SharedPreferences的内部接口,调用edit()方法即可获得它所对应的Editor对象。提供以下的方法来写入数据。




Commit:当Editor编辑完成后,调用该方法提交修改。



从用法角度来看,SharedPreferences和Editor组合起来非常像Map,其中SharedPreferences用来读取数据,而Editor用来写入数据。

 

 

创建一个SharedPreferences:

它本身是一个接口,无法直接创建实例,只能通过Contex提供的getSharedPreferences(String name , int mode)来获取SharedPreferences实例。第二个参数支持如下几个值:

Contex.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写。

 

Contex.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。

 

Contex.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。



小例子:随机数的写入与读取


程序中只有两个Button,一个用来写入数据,一个用来读取数据,故此不再给出布局代码。


import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
 * 
 * @author Caesar
 * 
 */
public class MainActivity extends Activity {

	SharedPreferences preferences;
	SharedPreferences.Editor editor;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);
		editor = preferences.edit();

		Button read, write;

		write = (Button) findViewById(R.id.write);
		read = (Button) findViewById(R.id.read);

		read.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// 读取字符串数据
				String time = preferences.getString("time", null);
				// 读取int类型的数据
				int randomNum = preferences.getInt("random", 0);
				String result = time == null ? "您暂时还未写入数据" : "写入时间为 : " + time
						+ "\n 上次生成的随机数是:" + randomNum;

				Toast.makeText(MainActivity.this, result, 0).show();
			}
		});

		write.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "
						+ "hh:mm:ss");
				// 存入当前时间
				editor.putString("time", sdf.format(new Date()));
				// 存入一个随机数
				editor.putInt("random", (int) (Math.random() * 100));
				// 提交所有存入的数据
				editor.commit();
			}
		});

	}
}




记录程序的使用次数:


import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

/**
 * 记录应用程序的使用次数:
 * 
 * @author Caesar
 * 
 */
public class MainActivity extends Activity {

	SharedPreferences preferences;
	SharedPreferences.Editor editor;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		preferences = getSharedPreferences("count", MODE_WORLD_READABLE);
		editor = preferences.edit();

		int count = preferences.getInt("count", 0);
		Toast.makeText(MainActivity.this, "程序已被使用 : " + count + "次", 0).show();

		editor.putInt("count", ++count);
		editor.commit();

	}
}




读写其他应用的SharedPreferences:

前提:指定权限

步骤:

 

1.需要创建其他程序对应的Contex

 

2.调用其他应用程序的COntex的getSharedPreferences(String name , int mode) 即可获取响应的SharedPreferences对象

 

3.如果需要向其他应用的SharedPreferences数据写入数据,调用SharedPreferences的edit方法获取响应的Editor即可

 



import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

/**
 * 
 * @author Caesar
 * 
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Context useCount = null;
		try {
			//获取其他应用程序锁对应的Contex
			useCount = createPackageContext(
					"com.example.sharedpreferencesdemo2",
					Context.CONTEXT_IGNORE_SECURITY);
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//使用其他程序的Contex获取对应的SharedPreferences
		SharedPreferences preferences = useCount.getSharedPreferences("count",
				Context.MODE_WORLD_READABLE);

		int count = preferences.getInt("count", 0);
		TextView show = (TextView) findViewById(R.id.show);
		show.setText("SharedPreferencesDemo2  已经被使用  " + count + "  次");

	}
}



相关频道:

用户评论