这是本文档旧的修订版!
Android数据持久化3种方式:文件存储、SharedPreference存储、数据库存储。
将inputText保存到data文件,存放在/data/data/com.example.filepersistencetest/files/
public void save(String inputText) { FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("data", Context.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(inputText); } catch (IOException e) { e.printStackTrace(); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { e.printStackTrace(); } } }
Context.MODE_PRIVATE
覆盖,Context.MODE_APPEND
追加。
public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder content = new StringBuilder(); try { in = openFileInput("data"); reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { content.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString(); }
TextUtils.isEmpty(inputText)
判断字符串inputText是否为null或为空。
所有的文件都是存放在/data/data/<package_name>/shared_prefs/
目录。
1. Context类中的getSharedPreferences()
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
"data"
是文件名,会生成data.xml
,MODE_PRIVATE
是固定写法,表示只有当前程序才可进行读写。
2. Activity类中的getPreferences()
// 假如当前是LoginActivity SharedPreferences pref = this.getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit();
此方法会将当前活动的类名作为文件名,就是LoginActivity.xml
。
3. PreferenceManager类中的getDefaultSharedPreferences()
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = pref.edit();
此方法固定文件名为<pakage_name>_preferences.xml
。
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit(); editor.putString("name", "Tom"); editor.putInt("age", 18); editor.putBoolean("married", false); editor.apply();
会在/data/data/com.example.sharedpreferencestest/shared_prefs/data.xml
生成文件,
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="name">Tom</string> <boolean name="married" value="false" /> <int name="age" value="18" /> </map>
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE); String name = pref.getString("name", ""); int age = pref.getInt("age", 0); boolean married = pref.getBoolean("married", false);
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "CREATE TABLE book (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "author TEXT, " + "price REAL, " + "pages INTEGER, " + "name TEXT)"; private Context mContext; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(CREATE_BOOK); Toast.makeText(mContext, "创建数据库成功!", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }