Android数据存储的三种方式-SharedPrefrences,File,SQLite
最后更新于:2022-04-01 16:14:59
1,使用SharedPrefrences
用于简单少量的数据,数据的格式简单:都是普通的字符串,标量类型的值等,比如各种配置信息等等
**SharedPrefrences与Editor简介**:
创建SharedPreferences实例,通过Context.getSharedPreferences(String name,int mode);方法来获取SharedPreferences的实例
mode的值:
*Context.MODE_PRIVATE;该SharedPreferences数据只能被本应用程序调读,写
* Context.MODE_WORLD_READABLE;该SharedPreferences数据能被其他程序读,但是不能写
* Context.MODE_WORLD_WRITEABLE;该SharedPreferences数据能被其他程序读,写
SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此他保存的数据主要是简单类型的key-value对
* SharedPreferences接口主要负责读取应用程序的Preferences数据,提供如下常用的方法访问key-value对
* boolean contains(String key);判断是否包含key的数据
* abstract Map getAll();获取全部键值对
* boolean getXxx(String key,xxx,defValue);获取指定的key对应的value值,如果key不存在,返回默认defvalue,xxx可以是Boolean,float,int,long,String等各种基本类型的值
SharedPreferences接口本身并没有提供写入数据的能力,而是通过 SharedPreferences的内部接口Editor写入数据,SharedPreferences调用edit()方法即可获得它所对应的Editor对象
Editor提供了如下方法:
* SharedPreferences.Editor clear();清空所有数据
* SharedPreferences.Editor putXxx(String key,xxx value);存入指定key对应的数据,xxx可以是Boolean,float,int,long,String等各种基本类型的值
* SharedPreferences.Editor remove(String key);删除指定key的数据
* Boolean commit();当Editor编辑完成之后,调用该方法提交修改
例子:一个按钮写数据,一个按钮读数据
activity_main.xml
~~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Write_SharedPreference" />
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Read_SharedPreference" />
</LinearLayout>
~~~
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-10_56e0d9b218fe9.jpg)
MainActivity.java
~~~
package com.hust.sharedpreferences;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
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;
/*
* 创建SharedPreferences实例,通过Context.getSharedPreferences(String name,int mode);方法来获取SharedPreferences的实例
* mode的值:
* Context.MODE_PRIVATE;该SharedPreferences数据只能被本应用程序调读,写
* Context.MODE_WORLD_READABLE;该SharedPreferences数据能被其他程序读,但是不能写
* Context.MODE_WORLD_WRITEABLE;该SharedPreferences数据能被其他程序读,写
*
*
* SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此他保存的数据主要是简单类型的key-value对
*
* SharedPreferences接口主要负责读取应用程序的Preferences数据,提供如下常用的方法访问key-value对
* boolean contains(String key);判断是否包含key的数据
* abstract Map<String,?> getAll();获取全部键值对
* boolean getXxx(String key,xxx,defValue);获取指定的key对应的value值,如果key不存在,返回默认defvalue,xxx可以是Boolean,float,int,long,String等各种基本类型的值
*
* SharedPreferences接口本身并没有提供写入数据的能力,而是通过 SharedPreferences的内部接口Editor写入数据,SharedPreferences调用edit()方法即可互殴它所对应的Editor对象
* Editor提供了如下方法:
* SharedPreferences.Editor clear();清空所有数据
* SharedPreferences.Editor putXxx(String key,xxx value);存入指定key对应的数据,xxx可以是Boolean,float,int,long,String等各种基本类型的值
* SharedPreferences.Editor remove(String key);删除指定key的数据
* Boolean commit();当Editor编辑完成之后,调用该方法提交修改
*
* */
public class MainActivity extends Activity {
//
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化SharedPreferences对象,读数据
preferences=getSharedPreferences("test",Context.MODE_WORLD_READABLE);
//实例化Editor对象,写数据
editor=preferences.edit();
Button read=(Button) findViewById(R.id.button2);
Button write=(Button) findViewById(R.id.button1);
read.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String time=preferences.getString("time", null);
int rnd=preferences.getInt("rnd", 0);
String result=time==null?"您暂时还未写入数据":"写入时间:"+time+"\n上次生成的数据数是:"+rnd;
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).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("rnd", (int)(Math.random()*1000));
editor.commit();
}
});
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
~~~
SharedPrefrences文件的存储位置:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-10_56e0d9b22cca0.jpg)
test.xml
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-10_56e0d9b246262.jpg)
待续。。。