八、Android数据存储与IO

2019-06-06

Android中提供了多种存取数据的方式:

  • Preference
  • File文件
  • SQLite数据库

SharedPreferences

什么是SharedPreferences ?

类似于我们常用的ini文件,用来保存应用程序的一些属性设置,常用于存储较简单的参数设置。
例如:用于保存上一次用户所作的修改或者自定义参数设定,当再次启动程序后依然保持原有的设置。

image.png

案例:


public class MainActivity extends Activity
{
    SharedPreferences preferences;
    SharedPreferences.Editor editor;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 获取只能被本应用程序读、写的SharedPreferences对象
        preferences = getSharedPreferences("crazyit", MODE_PRIVATE);
        editor = preferences.edit();
        Button read = (Button) findViewById(R.id.read);
        Button write = (Button) findViewById(R.id.write);
        read.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                // 读取字符串数据
                String time = preferences.getString("time", null);
                // 读取int类型的数据
                int randNum = preferences.getInt("random", 0);
                String result = time == null ? "您暂时还未写入数据" : "写入时间为:"
                        + time + "\n上次生成的随机数为:" + randNum;
                // 使用Toast提示信息
                Toast.makeText(MainActivity.this, result
                        , Toast.LENGTH_SHORT).show();
            }
        });
        write.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                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();
            }
        });
    }
}


读取其他程序的SharedPreferences

  • A程序读取B程序的SharedPrefences

  • B程序创建SharedPrefences时指定属性:getSharedPreferences(“文件名称.xml”,****)
    MODE_WORLD_READBLE
    MODE_WORLD_WRITABLE
    MODE_PRIVATE

  • A程序创建其他程序对应的Context:
    Context useCount=createPackageCOntext(“ B程序的包名”,Context.CONTEXT_IGNORE_SECUITY) SharePreferences prefs=usrCount. getSharedPreferences(“文件名称.xml”,****)

File

使用方式大体可以分为两种

  • 如果该文件事先就存在(一般称为static file),可以直接将文件作为资源,放在project/res/raw下面,这样处理起来比较方便。使用以下方式来读取资源文件:
    InputStream is = Resources. openRawResource(R.raw.resId);
  • 如果文件需要临时生成,或名字不固定等,文件默认将保存在/data/data//files下。
    FileInputStream is = Context. openFileInput(fileName) FileOutputStream os = Context. openFileOutput(fileName,mode);

读写SD卡上文件,步骤

  • 调用EnvironmentgetExternalStorageState()方法判断手机上是否插入了SD卡,且具有读写SD卡的权限
  • 调用EnvironmentgetExternalStorageDirectory()方法获取外部存储器,也就是SD卡的目录
  • 使用FileInputStreamFileOutputStreamFileReaderFileWriter读写SD卡上文件
  • 注意:必须在AndroidManifest.xml中添加读写SD卡的权限

SQLite数据库

你可能感兴趣的:(八、Android数据存储与IO)