日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android基础——数据持久化存储

發布時間:2025/3/21 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android基础——数据持久化存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 數據持久化存儲
    • 文件存儲
      • 數據保存
      • 數據讀取
    • 鍵值對存儲
      • 數據保存
      • 數據讀取
    • 數據庫存儲
      • 數據庫創建
      • 增加數據
      • 更新數據
      • 刪除數據
      • 查詢數據
      • 使用事物
      • 升級數據庫


內容來自于第一行代碼中數據持久化存儲這一章

數據持久化存儲

文件存儲

數據保存

Context.openFileOutput( )方法 用于文件輸出
第一個參數:文件名 默認保存到 /data/data/包名/files/
第二個參數:文件操作方式 Context.MODE_PRIVATE(覆蓋方式) Context.MODE_APPEND(附加方式,沒有就創建文件)
Android4.2中廢棄了MODE_WORLD_READABLE MODE_WORLD_WRITEABLE

public class MainActivity extends Activity {private EditText edit;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit = (EditText) findViewById(R.id.edit);}@Overrideprotected void onDestroy() {super.onDestroy();String inputText = edit.getText().toString();save(inputText);}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.openFileInput( )方法 用于文件輸入

public class MainActivity extends Activity {private EditText edit;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit = (EditText) findViewById(R.id.edit);String inputText = load();if (!TextUtils.isEmpty(inputText)) {edit.setText(inputText);edit.setSelection(inputText.length());Toast.makeText(this, "Restoring succeeded",Toast.LENGTH_SHORT).show();}}……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();} }

注意:
1、TextUitls.isEmpty( )一次檢查字符串兩種空值 “”與null

2、StringBuffer與StringBuilder的區別
StringBuffer不是線程同步的,所以不是線程安全的,但比StringBuilder速度快
StringBuilder是線程同步的,所以是線程安全的


鍵值對存儲

SharedPreferences使用鍵值對的方式來存儲數據,當保存一條數據的時候,需要給這條數據提供一個對應的鍵,這樣在讀取數據的時候可以通過這個鍵把相應的值取出來。

  • Context類提供getSharedPreferences( )方法
    文件存儲在 /data/data/share_prefs/目錄下
    Context.getSharedPreferences( )
    第一個參數:文件名
    第二個參數:存儲模式 Context.MODE_PRIVATE Context.MODE_MULTI_PROCESS
    Android4.2版本中廢棄了Context.MODE_WORLD_READABLE Context.MODE_WORLD_WIRTEABLE

  • Activity類提供getPreferences( )方法
    只有一個參數,即操作模式。保存的文件名即Activity的類名

  • PreferenceManager類提供getDefaultSharedPreferences( )
    只接收一個Context參數,靜態方法,保存的文件名即應用程序的包名

  • 數據保存

    public class MainActivity extends Activity {private Button saveData;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);saveData = (Button) findViewById(R.id.save_data);saveData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();editor.putString("name", "Tom");editor.putInt("age", 28);editor.putBoolean("married", false);editor.commit();}});} }

    數據讀取

    public class MainActivity extends Activity {private Button saveData;private Button restoreData;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);saveData = (Button) findViewById(R.id.save_data);restoreData = (Button) findViewById(R.id.restore_data);……restoreData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);String name = pref.getString("name", "");int age = pref.getInt("age", 0);boolean married = pref.getBoolean("married", false);Log.d("MainActivity", "name is " + name);Log.d("MainActivity", "age is " + age);Log.d("MainActivity", "married is " + married);}});} }


    數據庫存儲

    數據庫創建

    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, CursorFactory factory, int version) {super(context, name, factory, version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK);Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} }public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);Button createDatabase = (Button) findViewById(R.id.create_database);createDatabase.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {dbHelper.getWritableDatabase();} });} }

    增加數據

    public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button addData = (Button) findViewById(R.id.add_data);addData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();// 開始組裝第一條數據values.put("name", "The Da Vinci Code");values.put("author", "Dan Brown");values.put("pages", 454);values.put("price", 16.96);db.insert("Book", null, values); // 插入第一條數據values.clear();// 開始組裝第二條數據values.put("name", "The Lost Symbol");values.put("author", "Dan Brown");values.put("pages", 510);values.put("price", 19.95);db.insert("Book", null, values); // 插入第二條數據}});} }

    更新數據

    public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button updateData = (Button) findViewById(R.id.update_data);updateData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("price", 10.99);db.update("Book", values, "name = ?", new String[] { "The DaVinci Code" });}});} }

    刪除數據

    public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button deleteButton = (Button) findViewById(R.id.delete_data);deleteButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.delete("Book", "pages > ?", new String[] { "500" });}});} }

    查詢數據

    public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button queryButton = (Button) findViewById(R.id.query_data);queryButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();// 查詢Book表中所有的數據Cursor cursor = db.query("Book", null, null, null, null, null, null);if (cursor.moveToFirst()) {do {// 遍歷Cursor對象,取出數據并打印String name = cursor.getString(cursor.getColumnIndex("name"));String author = cursor.getString(cursor.getColumnIndex("author"));int pages = cursor.getInt(cursor.getColumnIndex("pages"));double price = cursor.getDouble(cursor.getColumnIndex("price"));Log.d("MainActivity", "book name is " + name);Log.d("MainActivity", "book author is " + author);Log.d("MainActivity", "book pages is " + pages);Log.d("MainActivity", "book price is " + price);} while (cursor.moveToNext());}cursor.close();}});} }

    使用事物

    public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button replaceData = (Button) findViewById(R.id.replace_data);replaceData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.beginTransaction(); // 開啟事務try {db.delete("Book", null, null);if (true) {// 在這里手動拋出一個異常,讓事務失敗throw new NullPointerException();}ContentValues values = new ContentValues();values.put("name", "Game of Thrones");values.put("author", "George Martin");values.put("pages", 720);values.put("price", 20.85);db.insert("Book", null, values);db.setTransactionSuccessful(); // 事務已經執行成功} catch (Exception e) {e.printStackTrace();} finally {db.endTransaction(); // 結束事務}}});} }

    升級數據庫

    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, "+ "category_id integer)";public static final String CREATE_CATEGORY = "create table Category ("+ "id integer primary key autoincrement, "+ "category_name text, "+ "category_code integer)";public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK);db.execSQL(CREATE_CATEGORY);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {switch (oldVersion) {case 1:db.execSQL(CREATE_CATEGORY);case 2:db.execSQL("alter table Book add column category_id integer");default:}} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Android基础——数据持久化存储的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: av激情小说 | 国产亚洲精久久久久久无码苍井空 | 精品久久久久久久久久久久久久久久 | 久久av高潮av无av萌白 | 精品熟女一区二区 | 91看片网页版| av手机版| 97国产成人无码精品久久久 | 国产精品久久毛片 | 西西4444www大胆无码 | 好看的中文字幕av | 青草一区 | 囯产精品一品二区三区 | 男人的天堂av女优 | 日韩一区二区三区四区 | 久久久1| 一道本在线播放 | 国产精品入口免费 | 国产xxxxx视频| 欧美性生活在线视频 | 国产毛片毛片毛片毛片毛片 | 成人高清在线 | 日韩欧美成人精品 | 欧美大片免费播放器 | 欧洲自拍偷拍 | 高潮流白浆在线观看 | 黄色美女av | 乱xxxxx普通话对白 | 色com| 轮番上阵免费观看在线电影 | 91一区二区在线观看 | 综合国产精品 | 日本免费看 | 欧美理论在线 | 欧美极品第一页 | 91九色蝌蚪porny | 免费看成年人视频 | 亚洲激情社区 | 亚洲日本视频在线观看 | av电影在线播放 | 性色av免费观看 | 老司机在线精品视频 | 嫩草视频一区二区三区 | 精品一区二区三区四 | 欧美日韩中文字幕在线视频 | 亚洲手机看片 | 偷拍久久久 | 国产精品色 | 欧美全黄 | 日韩爱爱爱 | 在线观看 亚洲 | 亚洲 欧美 日韩系列 | 成人在线直播 | 丰满熟女人妻一区二区三 | 欧美久久久一区二区三区 | 日本美女黄视频 | 深夜网站在线 | 久久精品国产77777蜜臀 | 国产精品国产三级国产三级人妇 | 一本一道久久a久久 | 免费在线观看的av | 另类国产 | 人妻夜夜爽天天爽 | 免费在线看黄网站 | 91制服诱惑| 日韩欧美黄色 | 日韩成人在线观看视频 | 成人在线观看一区 | 免费草逼视频 | 亚洲欧美精品午睡沙发 | 熊出没之冬日乐翻天免费高清观看 | 国产精品国产三级国产普通话对白 | 中文一级片 | 国产男女猛烈无遮挡 | 亚洲在线国产 | 国产成人免费电影 | 香蕉视频在线观看视频 | 另类小说亚洲色图 | 国内精品视频一区 | 欧洲精品在线观看 | 国产精品羞羞答答在线观看 | 欧美亚洲在线视频 | www.国产视频.com| 婷婷深爱网| 91精品国产高清一区二区三区蜜臀 | 日韩在线一二三区 | 欧美日韩综合在线观看 | 无码人妻久久一区二区三区 | 东凛在线观看 | 国产激情毛片 | 久久99综合 | av.www| 日韩精品在线观看网站 | 午夜国产在线 | 国产性猛交96 | 久久精品资源 | 中文字幕有码视频 | 亚洲国产精品自拍 | 少妇特黄a一区二区三区 |