Android - 持久化
一、文件存储
Context类提供openFileOutput、openFileInput;参数:文件名(不可以包含路径)、文件操作模式(MODE_PRIVATE、MODE_APPEND)
文件默认存储到/data/data/<packagename>/files/目录下;借助DDMS的File Explorer可以查看具体内容;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | private final String fileName= "data" ; private void save(String inputText){ FileOutputStream out= null ; BufferedWriter writer= null ; try { out=openFileOutput(fileName, 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(); } } } private String load(){ FileInputStream in= null ; BufferedReader reader= null ; StringBuilder content= new StringBuilder(); try { in=openFileInput(fileName); reader= new BufferedReader( new InputStreamReader(in)); String line= null ; while ((line=reader.readLine())!= null ){ content.append(line); } } catch (IOException e){ e.printStackTrace(); } finally { try { if (reader!= null ) reader.close(); } catch (IOException e){ e.printStackTrace(); } } return content.toString(); } |
二、SharedPreferences 存储
SharedPreferences 是使用键值对的方式来存储数据,文件存储在 /data/data/<packagename>/shared_prefs/目录下,使用XML格式管理数据;
首先需要获取到 SharedPreferences 对象,调用 edit()方法获取一个 SharedPreferences.Editor 对象,向该对象添加数据(putString()),最后调用commit();
1)Context 类中的 getSharedPreferences() 方法;
2)Activity 类中的 getPreferences() 方法;总是将活动的类名作为 SharedPreferences 的文件名;
3)PreferenceManager 类中的 getDefaultSharedPreferences() 方法;自动使用应用程序的包名作为前缀命名文件;
1 2 3 4 | SharedPreferences.Editor editor=getSharedPreferences( "data" ,MODE_PRIVATE).edit(); editor.putString( "name" , "Tom" ); editor.putInt( "age" , 15 ); editor.commit(); |
三、SQLite 数据库存储
1、SQLiteOpenHelper 抽象类
抽象方法:onCreate() 、onUpgrade(),创建和升级数据库逻辑
实例方法:getReadableDataBase() 、getWritableDatabase() 创建或打开一个现有数据库,SQLiteDatabase ;
2、使用adb工具查看数据库:1) sdk的platform-tools 目录下执行命令 adb shell 就进入设备的控制台;
2) cd 到/data/data/<packagename>/databases/ 目录;
3) 可使用 ls 查看文件列表,使用sqlite3 databaseName 打开数据库;
4) 数据库操作命令有:.table .schema
3、Sqlite 数据类型:integer-整型、text-文本类型、real-浮点型、blob-二进制类型;
4、使用SQLiteDatabase进行CRUD操作;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ContentValues values= new ContentValues(); values.put( "price" , 10.99 ); db.update( "Book" , values, "name=?" , new String[]{ "The Lost Symbol" }); // Cursor cursor=db.query( "Book" , null , null , null , null , null , null ); if (cursor.moveToFirst()){ do { 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" ,name+ "|" +author+ "|" +pages+ "|" +price); } while (cursor.moveToNext()); } cursor.close(); |
5、直接执行SQL操作数据库:db.execSql(strSql)、db.rawQuery(queryStr);SQL中的占位符使用「?」
6、使用事务:
1 2 3 4 5 6 7 8 9 | db.beginTransaction(); //开启事务 try { ... db.setTransactionSuccessful(); //事务执行成功 } catch (...){ } finally { db.endTransaction(); //结束事务 } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步