第9章 为有源头活水来-使用SQLite、ContentProvider与Preferences处理数据
前言:Preferences机制广泛应用于存储应用程序中的配置信息,键值对的形式存储在应用程序的私有Preferences目录
9.1 文件I/O
java.io.FileInputStream & java.io.FileOutputStream & java.io.File
每个应用程序所在的包都有一个私有的存储数据的目录,只有属于这个包中的应用程序才有写入的权限。/data/data/<包名>/
/sdcard/目录是SD卡对应的目录
文件系统中其他的系统目录,第三方应用程序都不可写。
FileOutputStream
private void setLaunchMode(String filename, String mode) { try { FileOutputStream is = new FileOutputStream(filename); byte buffer[] = mode.getBytes(); is.write(buffer); is.close(); } catch (Exception e) { e.printStackTrace(); } }
FileInputStream
private String getLaunchMode(String filename) { String launchMode = ""; try { File mFile= new File(filename); if (mFile.exists()) { FileInputStream is = new FileInputStream(filename); int length = is.available(); byte buffer[] = new byte[length]; is.read(buffer); launchMode = EncodingUtils.getString(buffer, "UTF-8"); is.close(); } } catch (Exception e) { e.printStackTrace(); } return launchMode; }
9.2 SQLite 数据库
9.4 使用Preferences存储应用程序数据
Preferences是一种轻量级的数据存储机制,它将一些简单数据类型的数据,包括boolean、int、float、long、String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录
(data/data/<包名>/shared_prefs)
这种机制广泛应用于存储应用程序中的配置信息。
用一个Context的对象调用getSharedPreferences(String name, int mode)方法传入Preferences文件名和打开模式,就可以获得一个SharedPreferences的对象。
[读取]利用SharedPreferences对象可以调用一些getter方法,传入相应的键来读取数据。
[修改]利用SharedPreferences对象调用edit()方法获得一个内部类Editor对象,然后用这个Editor对象就可以对Preferences文件进行编辑了,编辑完后调用commit()方法提交。
Preferences
public class Preferences extends Activity{ EditText edit; SharedPreferences sp; final static String PREF = "MY_PREF"; final static String EDIT_KEY = "EDIT_CONTENT"; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); edit = (EditText)findViewById(R.id.edittext); sp = getSharedPreferences(PREF, 0); String initial = sp.getString(EDIT_KEY, null); if (initial != null){ edit.setText(initial); } } public void onDestroy(){ SharedPreferences.Editor editor = sp.edit(); editor.putString(EDIT_KEY, String.valueOf(edit.getText())); edit.commit(); super.onDestroy(); } }