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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android4开发入门经典 之 第七部分:数据存储

發布時間:2023/12/20 Android 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android4开发入门经典 之 第七部分:数据存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據存儲基本知識

Android系統提供了多種數據存儲的方式,如下:

1:Shared Preferences:用來存儲私有的、原始類型的、簡單的數據,通常是Key-value對 2:Internal Storage:在設備內部存儲器中存儲數據 3:External Storage:在設備的擴展存儲上保存數據,通常是SD卡 4:SQLite Databases:SQLite數據庫 5:Network Connection:存儲數據到網絡服務器上

使用Shared Preferences

Shared Preferences是用來存儲一些應用私有的、原始類型的、簡單的數據的一個框架,保存的數據通常是Key-value對

要獲得SharedPreferences對象,通常有兩種方法:

1:getSharedPreferences():如果你想要使用多個preferences文件的話,可以通過傳入一個識別的名稱就可以獲取到相應的SharedPreferences對象 2:getPreferences():如果一個preferences文件僅僅在當前的Activity中使用的話,你可以使用這個方法,無需要提供識別的名稱。 使用SharedPreferences對象來獲取數據非常簡單,直接使用相應的getter方法即可

使用SharedPreferences對象來存儲數據,大致有如下幾步

1:調用edit()方法來得到SharedPreferences.Editor 2:調用相應的put方法值添加進去 3:調用commit來提交保存這些數據

向SharedPreferences對象寫入數據


java代碼: 查看復制到剪貼板打印
  • SharedPreferences?sp?=getSharedPreferences("SP",Activity.MODE_PRIVATE);??
  • SharedPreferences.Editor?editor?=?sp.edit();??
  • editor.putString("param1",?"sp1");??
  • editor.putInt("param2",?222);??
  • editor.commit();??
  • 注意:所有的寫入操作應該在一個Editor里面,也就是不要調用多次sp.edit()方法,每調用一次就會創建一個Editor

    在獲得SharedPreferences對象的時候,需要指定文件創建的模式:

    1:MODE_PRIVATE:默認模式,文件只可以被調用該方法的應用程序訪問 2:MODE_WORLD_READABLE:賦予所有的應用程序都可以讀取該文件 3:MODE_WORLD_WRITEABLE:賦予所有的應用程序都可以寫該文件 4:MODE_MULTI_PROCESS:SharedPreference的裝載標記,設置它,文件將會在SharedPreference實例被裝載到進程的時候檢查是否被修改,主要用在一個應用有多個進程的情況。

    從SharedPreferences對象讀取數據


    java代碼: 查看復制到剪貼板打印
  • SharedPreferences?sp?=?T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);??
  • String?p1?=?sp.getString("param1","");??
  • int?p2?=?sp.getInt("param2",0);??
  • SharedPreferences的數據以xml存儲在data/data/包名/shared_prefs下面

    Internal Storage

    當應用程序被安裝到系統中后,其所在的包會有一個文件夾用于存放自己的數據,只有這個應用程序才有對這個文件夾的寫入權限,這個私有的文件夾位于Android系統的/data/data/<應用程序包名>目錄下,其他的應用程序都無法向這個文件夾中寫入數據。 要讀取應用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

    在使用openFileOutput方法的時候,需要指定打開的模式:

    1:MODE_PRIVATE:默認模式,文件只可以被調用該方法的應用程序訪問 2:MODE_APPEND:如果文件已存在就向該文件的末尾繼續寫入數據,而不是覆蓋原來的數據。 3:MODE_WORLD_READABLE:賦予所有的應用程序對該文件讀的權限。 4:MODE_WORLD_WRITEABLE:賦予所有的應用程序對該文件寫的權限。

    向應用對應的Internal Storage里面寫入數據,這里以寫對象來示例,如下:


    java代碼: 查看復制到剪貼板打印
  • FileOutputStream?fout?=?null;??
  • ObjectOutputStream?os?=?null;??
  • try{??
  • fout?=?HelloWorldActivity.this.openFileOutput("MyData.txt",Activity.MODE_PRIVATE);??
  • os?=?new?ObjectOutputStream(fout);??
  • os.writeObject(list);??
  • }catch(Exception?err){err.printStackTrace();}??
  • finally{??
  • try?{fout.close();}catch(IOException?e1){e1.printStackTrace();}??
  • try?{os.close();}?catch(IOException?e){e.printStackTrace();}??
  • }??
  • 不支持BufferedOutputStream??
  • 讀取應用對應的Internal Storage里面的數據,這里以讀取對象來示例,如下:


    java代碼: 查看復制到剪貼板打印
  • FileInputStream?fin?=?null;??
  • ObjectInputStream?os?=?null;??
  • try{??
  • fin?=?HelloWorldActivity.this.openFileInput("MyData.txt");??
  • os?=?new?ObjectInputStream(fin);??
  • Toast.makeText(HelloWorldActivity.this,?"read?file="+os.readObject(),?Toast.LENGTH_LONG).show();??
  • }catch(Exception?err){??
  • err.printStackTrace();??
  • }finally{??
  • try{fin.close();}catch(IOException?e1){e1.printStackTrace();}??
  • try{os.close();}catch(IOException?e){e.printStackTrace();}??
  • }??
  • 同樣不支持BufferedInputStream??
  • Internal Storage-保存Cache文件

    如果你希望保存一些Cache數據,你可以使用getCacheDir() 來打開文件,將會把數據存儲到一個臨時的Cache文件里面。 當設備的內部存儲空間低的時候,Android系統可能會清除這些Cache文件,以回收存儲空間,這也意味著,你不能在Cache文件里面存儲需要持久化的數據。

    Internal Storage-其它常用方法

    在Context中其他常用的方法:

    1:getFilesDir() 得到內部存儲的文件系統的絕對路徑 2:getDir() 在內部存儲中創建目錄,如果存在的話就打開這個目錄 3:deleteFile() 刪除文件 4:fileList() 返回當前應用存儲的文件列表

    External Storage(操作SD卡)

    Android的I/O基本上和Java的I/O是一樣的,只有一點點不同的地方,比如:

    1:需要加入sdcard的操作權限 2:需要判斷sd卡是否存在,存在才能操作 3:放在sdcard的文件是公共的,而放到自己應用目錄里面的文件才是私有的

    常用的功能

    1:在AndroidManifest.xml添加sdcard讀寫操作權限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> 2:在AndroidManifest.xml添加能創建和刪除sdcard文件的操作權限 <uses-permission android:name=?"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"?/> 3:判斷SD卡是否插入 Environment.getExternalStorageState().equals(android.os.Enviroment.MEDIA_MOUNTED) 4:獲得SD卡根目錄 Android7及以下版本,使用:Environment.getExternalStorageDirectory()可以獲得如下路徑“/Android/data/<package_name>/files/” Android8及以上版本,建議使用:Context的getExternalFilesDir(type)方法,type表示你想要訪問什么樣的子目錄,比如Environment.DIRECTORY_MUSIC,如果訪問根目錄,就傳入null。

    從SD卡上讀文件,基本就是Java里面I/O的操作,這里以讀對象為例:


    java代碼: 查看復制到剪貼板打印
  • public?Object?readFile(String?filePathName)?{??
  • Object?ret?=?null;??
  • FileInputStream?fins?=?null;??
  • ObjectInputStream?os?=?null;??
  • try?{??
  • File?file?=?new?File(Environment.getExternalStorageDirectory()?+?filePathName);??
  • fins?=?new?FileInputStream(file);??
  • os?=?new?ObjectInputStream(fins);??
  • ret?=?os.readObject();??
  • }?catch(Exception?err){err.printStackTrace();}finally{??
  • try?{fins.close();}catch(IOException?e){e.printStackTrace();}??
  • try?{os.close();}catch(IOException?e){e.printStackTrace();}??
  • }??
  • return?ret;??
  • }??
  • 比較遺憾的是,目前加上BufferedInputStream就出錯??
  • 向SD卡上寫文件,基本就是Java里面I/O的操作,這里以寫對象為例:


    java代碼: 查看復制到剪貼板打印
  • public?void?writefile(String?filePathName,Object?obj){??
  • FileOutputStream?fouts?=?null;??
  • ObjectOutputStream?os?=?null;??
  • try?{??
  • File?file?=?new?File(Environment.getExternalStorageDirectory()?+filePathName);??
  • if(file.getParentFile().isDirectory()?&&?!file.getParentFile().exists()){??
  • file.getParentFile().mkdirs();??
  • }??
  • if(!file.exists()){?file.createNewFile();?}??
  • fouts?=?new?FileOutputStream(file);??
  • os?=?new?ObjectOutputStream(fouts);??
  • os.writeObject(obj);??
  • }?catch?(Exception?err)?{err.printStackTrace();??
  • }finally{??
  • try?{fouts.close();}catch(IOException?e){e.printStackTrace();}??
  • try?{os.close();}catch(IOException?e){e.printStackTrace();}??
  • }??
  • }??
  • 如果要保存成Cache文件,可以使用Context的getExternalCacheDir方法??
  • ???

  • 視頻配套PPT,視頻地址【?Android4開發入門經典獨家視頻課程】 原創內容 轉自請注明【?http://***/forum/blogPost/list/2746.html#7728】

    數據存儲基本知識

    Android系統提供了多種數據存儲的方式,如下:

    1:Shared Preferences:用來存儲私有的、原始類型的、簡單的數據,通常是Key-value對 2:Internal Storage:在設備內部存儲器中存儲數據 3:External Storage:在設備的擴展存儲上保存數據,通常是SD卡 4:SQLite Databases:SQLite數據庫 5:Network Connection:存儲數據到網絡服務器上

    使用Shared Preferences

    Shared Preferences是用來存儲一些應用私有的、原始類型的、簡單的數據的一個框架,保存的數據通常是Key-value對

    要獲得SharedPreferences對象,通常有兩種方法:

    1:getSharedPreferences():如果你想要使用多個preferences文件的話,可以通過傳入一個識別的名稱就可以獲取到相應的SharedPreferences對象 2:getPreferences():如果一個preferences文件僅僅在當前的Activity中使用的話,你可以使用這個方法,無需要提供識別的名稱。 使用SharedPreferences對象來獲取數據非常簡單,直接使用相應的getter方法即可

    使用SharedPreferences對象來存儲數據,大致有如下幾步

    1:調用edit()方法來得到SharedPreferences.Editor 2:調用相應的put方法值添加進去 3:調用commit來提交保存這些數據

    向SharedPreferences對象寫入數據


    java代碼: 查看復制到剪貼板打印
  • SharedPreferences?sp?=getSharedPreferences("SP",Activity.MODE_PRIVATE);??
  • SharedPreferences.Editor?editor?=?sp.edit();??
  • editor.putString("param1",?"sp1");??
  • editor.putInt("param2",?222);??
  • editor.commit();??
  • 注意:所有的寫入操作應該在一個Editor里面,也就是不要調用多次sp.edit()方法,每調用一次就會創建一個Editor

    在獲得SharedPreferences對象的時候,需要指定文件創建的模式:

    1:MODE_PRIVATE:默認模式,文件只可以被調用該方法的應用程序訪問 2:MODE_WORLD_READABLE:賦予所有的應用程序都可以讀取該文件 3:MODE_WORLD_WRITEABLE:賦予所有的應用程序都可以寫該文件 4:MODE_MULTI_PROCESS:SharedPreference的裝載標記,設置它,文件將會在SharedPreference實例被裝載到進程的時候檢查是否被修改,主要用在一個應用有多個進程的情況。

    從SharedPreferences對象讀取數據


    java代碼: 查看復制到剪貼板打印
  • SharedPreferences?sp?=?T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);??
  • String?p1?=?sp.getString("param1","");??
  • int?p2?=?sp.getInt("param2",0);??
  • SharedPreferences的數據以xml存儲在data/data/包名/shared_prefs下面

    Internal Storage

    當應用程序被安裝到系統中后,其所在的包會有一個文件夾用于存放自己的數據,只有這個應用程序才有對這個文件夾的寫入權限,這個私有的文件夾位于Android系統的/data/data/<應用程序包名>目錄下,其他的應用程序都無法向這個文件夾中寫入數據。 要讀取應用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

    在使用openFileOutput方法的時候,需要指定打開的模式:

    1:MODE_PRIVATE:默認模式,文件只可以被調用該方法的應用程序訪問 2:MODE_APPEND:如果文件已存在就向該文件的末尾繼續寫入數據,而不是覆蓋原來的數據。 3:MODE_WORLD_READABLE:賦予所有的應用程序對該文件讀的權限。 4:MODE_WORLD_WRITEABLE:賦予所有的應用程序對該文件寫的權限。

    向應用對應的Internal Storage里面寫入數據,這里以寫對象來示例,如下:


    java代碼: 查看復制到剪貼板打印
  • FileOutputStream?fout?=?null;??
  • ObjectOutputStream?os?=?null;??
  • try{??
  • fout?=?HelloWorldActivity.this.openFileOutput("MyData.txt",Activity.MODE_PRIVATE);??
  • os?=?new?ObjectOutputStream(fout);??
  • os.writeObject(list);??
  • }catch(Exception?err){err.printStackTrace();}??
  • finally{??
  • try?{fout.close();}catch(IOException?e1){e1.printStackTrace();}??
  • try?{os.close();}?catch(IOException?e){e.printStackTrace();}??
  • }??
  • 不支持BufferedOutputStream??
  • 讀取應用對應的Internal Storage里面的數據,這里以讀取對象來示例,如下:


    java代碼: 查看復制到剪貼板打印
  • FileInputStream?fin?=?null;??
  • ObjectInputStream?os?=?null;??
  • try{??
  • fin?=?HelloWorldActivity.this.openFileInput("MyData.txt");??
  • os?=?new?ObjectInputStream(fin);??
  • Toast.makeText(HelloWorldActivity.this,?"read?file="+os.readObject(),?Toast.LENGTH_LONG).show();??
  • }catch(Exception?err){??
  • err.printStackTrace();??
  • }finally{??
  • try{fin.close();}catch(IOException?e1){e1.printStackTrace();}??
  • try{os.close();}catch(IOException?e){e.printStackTrace();}??
  • }??
  • 同樣不支持BufferedInputStream??
  • Internal Storage-保存Cache文件

    如果你希望保存一些Cache數據,你可以使用getCacheDir() 來打開文件,將會把數據存儲到一個臨時的Cache文件里面。 當設備的內部存儲空間低的時候,Android系統可能會清除這些Cache文件,以回收存儲空間,這也意味著,你不能在Cache文件里面存儲需要持久化的數據。

    Internal Storage-其它常用方法

    在Context中其他常用的方法:

    1:getFilesDir() 得到內部存儲的文件系統的絕對路徑 2:getDir() 在內部存儲中創建目錄,如果存在的話就打開這個目錄 3:deleteFile() 刪除文件 4:fileList() 返回當前應用存儲的文件列表

    External Storage(操作SD卡)

    Android的I/O基本上和Java的I/O是一樣的,只有一點點不同的地方,比如:

    1:需要加入sdcard的操作權限 2:需要判斷sd卡是否存在,存在才能操作 3:放在sdcard的文件是公共的,而放到自己應用目錄里面的文件才是私有的

    常用的功能

    1:在AndroidManifest.xml添加sdcard讀寫操作權限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> 2:在AndroidManifest.xml添加能創建和刪除sdcard文件的操作權限 <uses-permission android:name=?"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"?/> 3:判斷SD卡是否插入 Environment.getExternalStorageState().equals(android.os.Enviroment.MEDIA_MOUNTED) 4:獲得SD卡根目錄 Android7及以下版本,使用:Environment.getExternalStorageDirectory()可以獲得如下路徑“/Android/data/<package_name>/files/” Android8及以上版本,建議使用:Context的getExternalFilesDir(type)方法,type表示你想要訪問什么樣的子目錄,比如Environment.DIRECTORY_MUSIC,如果訪問根目錄,就傳入null。

    從SD卡上讀文件,基本就是Java里面I/O的操作,這里以讀對象為例:


    java代碼: 查看復制到剪貼板打印
  • public?Object?readFile(String?filePathName)?{??
  • Object?ret?=?null;??
  • FileInputStream?fins?=?null;??
  • ObjectInputStream?os?=?null;??
  • try?{??
  • File?file?=?new?File(Environment.getExternalStorageDirectory()?+?filePathName);??
  • fins?=?new?FileInputStream(file);??
  • os?=?new?ObjectInputStream(fins);??
  • ret?=?os.readObject();??
  • }?catch(Exception?err){err.printStackTrace();}finally{??
  • try?{fins.close();}catch(IOException?e){e.printStackTrace();}??
  • try?{os.close();}catch(IOException?e){e.printStackTrace();}??
  • }??
  • return?ret;??
  • }??
  • 比較遺憾的是,目前加上BufferedInputStream就出錯??
  • 向SD卡上寫文件,基本就是Java里面I/O的操作,這里以寫對象為例:


    java代碼: 查看復制到剪貼板打印
  • public?void?writefile(String?filePathName,Object?obj){??
  • FileOutputStream?fouts?=?null;??
  • ObjectOutputStream?os?=?null;??
  • try?{??
  • File?file?=?new?File(Environment.getExternalStorageDirectory()?+filePathName);??
  • if(file.getParentFile().isDirectory()?&&?!file.getParentFile().exists()){??
  • file.getParentFile().mkdirs();??
  • }??
  • if(!file.exists()){?file.createNewFile();?}??
  • fouts?=?new?FileOutputStream(file);??
  • os?=?new?ObjectOutputStream(fouts);??
  • os.writeObject(obj);??
  • }?catch?(Exception?err)?{err.printStackTrace();??
  • }finally{??
  • try?{fouts.close();}catch(IOException?e){e.printStackTrace();}??
  • try?{os.close();}catch(IOException?e){e.printStackTrace();}??
  • }??
  • }??
  • 如果要保存成Cache文件,可以使用Context的getExternalCacheDir方法??
  • ???
  • 視頻配套PPT,視頻地址【?Android4開發入門經典獨家視頻課程】 原創內容 轉自請注明【?http://***/forum/blogPost/list/2746.html#7728】

    轉載于:https://www.cnblogs.com/helloandroid1/archive/2012/08/06/2624538.html

    總結

    以上是生活随笔為你收集整理的Android4开发入门经典 之 第七部分:数据存储的全部內容,希望文章能夠幫你解決所遇到的問題。

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