Android 資料儲存五種方式使用與總結
轉載自http://blog.csdn.net/amazing7/article/details/51437435
1、概述 |
Android提供了5種方式來讓使用者儲存持久化應用程式資料。根據自己的需求來做選擇,比如資料是否是應用程式私有的,是否能被其他程式訪問,需要多少資料儲存空間等,分別是:
① 使用SharedPreferences儲存資料
② 檔案儲存資料
③ SQLite資料庫儲存資料
④ 使用ContentProvider儲存資料
⑤ 網路儲存資料
Android提供了一種方式來暴露你的資料(甚至是私有資料)給其他應用程式 - ContentProvider。它是一個可選元件,可公開讀寫你應用程式資料。
2、SharedPreferences儲存 |
SharedPreference類提供了一個總體框架,使您可以儲存和檢索的任何基本資料型別( boolean, float, int, long, string)的持久鍵-值對(基於XML檔案儲存的“key-value”鍵值對資料)。
通常用來儲存程式的一些配置資訊。其儲存在“data/data/程式包名/shared_prefs目錄下。
xml 處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對於記憶體資源佔用比較好。
2.1 我們可以通過以下兩種方法獲取SharedPreferences物件(通過Context):
① getSharedPreferences (String name, int mode)
當我們有多個SharedPreferences的時候,根據第一個引數name獲得相應的SharedPreferences物件。
② getPreferences (int mode)
如果你的Activity中只需要一個SharedPreferences的時候使用。
這裡的mode有四個選項:
Context.MODE_PRIVATE
- 1
- 1
該SharedPreferences資料只能被本應用程式讀、寫。
Context.MODE_WORLD_READABLE
- 1
- 1
該SharedPreferences資料能被其他應用程式讀,但不能寫。
Context.MODE_WORLD_WRITEABLE
- 1
- 1
該SharedPreferences資料能被其他應用程式讀和寫。
Context.MODE_MULTI_PROCESS
- 1
- 1
sdk2.3後新增的選項,當多個程序同時讀寫同一個SharedPreferences時它會檢查檔案是否修改。
2.2 向Shared Preferences中寫入值
首先要通過 SharedPreferences.Editor獲取到Editor物件;
然後通過Editor的putBoolean() 或 putString()等方法存入值;
最後呼叫Editor的commit()方法提交;
//Use 0 or MODE_PRIVATE for the default operation
SharedPreferences settings = getSharedPreferences("fanrunqi", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("isAmazing", true);
// 提交本次編輯
editor.commit();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
同時Edit還有兩個常用的方法:
editor.remove(String key) :下一次commit的時候會移除key對應的鍵值對
editor.clear():移除所有鍵值對
2.3 從Shared Preferences中讀取值
讀取值使用 SharedPreference物件的getBoolean()或getString()等方法就行了(沒Editor 啥子事)。
SharedPreferences settings = getSharedPreferences("fanrunqi", 0);
boolean isAmazing= settings.getBoolean("isAmazing",true);
- 1
- 2
- 1
- 2
2.4 Shared Preferences的優缺點
可以看出來Preferences是很輕量級的應用,使用起來也很方便,簡潔。但儲存資料型別比較單一(只有基本資料型別),無法進行條件查詢,只能在不復雜的儲存需求下使用,比如儲存配置資訊等。
3、檔案資料儲存 |
3.1 使用內部儲存
當檔案被儲存在內部儲存中時,預設情況下,檔案是應用程式私有的,其他應用不能訪問。當用戶解除安裝應用程式時這些檔案也跟著被刪除。
檔案預設儲存位置:/data/data/包名/files/檔名。
3.1.1 建立和寫入一個內部儲存的私有檔案:
① 呼叫Context的openFileOutput()函式,填入檔名和操作模式,它會返回一個FileOutputStream物件。
② 通過FileOutputStream物件的write()函式寫入資料。
③ FileOutputStream物件的close ()函式關閉流。
例如:
String FILENAME = "a.txt";
String string = "fanrunqi";
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
在 openFileOutput(String name, int mode)方法中
-
name引數: 用於指定檔名稱,不能包含路徑分隔符“/” ,如果檔案不存在,Android 會自動建立它。
-
mode引數:用於指定操作模式,分為四種:
Context.MODE_PRIVATE = 0
為預設操作模式,代表該檔案是私有資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容。
Context.MODE_APPEND = 32768
該模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案。
Context.MODE_WORLD_READABLE = 1
表示當前檔案可以被其他應用讀取。
MODE_WORLD_WRITEABLE
表示當前檔案可以被其他應用寫入。
3.1.2 讀取一個內部儲存的私有檔案:
① 呼叫openFileInput( ),引數中填入檔名,會返回一個FileInputStream物件。
② 使用流物件的 read()方法讀取位元組
③ 呼叫流的close()方法關閉流
例如:
String FILENAME = "a.txt";
try {
FileInputStream inStream = openFileInput(FILENAME);
int len = 0;
byte[] buf = new byte[1024];
StringBuilder sb = new StringBuilder();
while ((len = inStream.read(buf)) != -1) {
sb.append(new String(buf, 0, len));
}
inStream.close();
} catch (Exception e) {
e.printStackTrace();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
其他一些經常用到的方法:
-
getFilesDir(): 得到記憶體儲檔案的絕對路徑
-
getDir(): 在記憶體儲空間中建立或開啟一個已經存在的目錄
-
deleteFile(): 刪除儲存在內部儲存的檔案。
-
fileList(): 返回當前由應用程式儲存的檔案的陣列(記憶體儲目錄下的全部檔案)。
3.1.3 儲存編譯時的靜態檔案
如果你想在應用編譯時儲存靜態檔案,應該把檔案儲存在專案的 res/raw/ 目錄下,你可以通過 openRawResource()方法去開啟它(傳入引數R.raw.filename),這個方法返回一個 InputStream流物件你可以讀取檔案但是不能修改原始檔案。
InputStream is = this.getResources().openRawResource(R.raw.filename);
- 1
- 1
3.1.4 儲存記憶體快取檔案
有時候我們只想快取一些資料而不是持久化儲存,可以使用getCacheDir()去開啟一個檔案,檔案的儲存目錄( /data/data/包名/cache )是一個應用專門來儲存臨時快取檔案的記憶體目錄。
當裝置的內部儲存空間比較低的時候,Android可能會刪除這些快取檔案來恢復空間,但是你不應該依賴系統來回收,要自己維護這些快取檔案把它們的大小限制在一個合理的範圍內,比如1MB.當你解除安裝應用的時候這些快取檔案也會被移除。
3.2 使用外部儲存(sdcard)
因為內部儲存容量限制,有時候需要儲存資料比較大的時候需要用到外部儲存,使用外部儲存分為以下幾個步驟:
3.2.1 新增外部儲存訪問限權
首先,要在AndroidManifest.xml中加入訪問SDCard的許可權,如下:
<!-- 在SDCard中建立與刪除檔案許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入資料許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
3.2.2 檢測外部儲存的可用性
在使用外部儲存時我們需要檢測其狀態,它可能被連線到計算機、丟失或者只讀等。下面程式碼將說明如何檢查狀態:
//獲取外儲存的狀態
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// 可讀可寫
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// 可讀
} else {
// 可能有很多其他的狀態,但是我們只需要知道,不能讀也不能寫
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3.2.3 訪問外部儲存器中的檔案
1、如果 API 版本大於或等於8,使用
getExternalFilesDir (String type)
該方法開啟一個外儲存目錄,此方法需要一個型別,指定你想要的子目錄,如型別引數DIRECTORY_MUSIC和 DIRECTORY_RINGTONES(傳null就是你應用程式的檔案目錄的根目錄)。通過指定目錄的型別,確保Android的媒體掃描器將掃描分類系統中的檔案(例如,鈴聲被確定為鈴聲)。如果使用者解除安裝應用程式,這個目錄及其所有內容將被刪除。
例如:
File file = new File(getExternalFilesDir(null), "fanrunqi.jpg");
- 1
- 1
2、如果API 版本小於 8 (7或者更低)
getExternalStorageDirectory ()
通過該方法開啟外儲存的根目錄,你應該在以下目錄下寫入你的應用資料,這樣當解除安裝應用程式時該目錄及其所有內容也將被刪除。
/Android/data/<package_name>/files/
- 1
- 1
讀寫資料:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄 "/sdcard"
File saveFile = new File(sdCardDir,"a.txt");
//寫資料
try {
FileOutputStream fos= new FileOutputStream(saveFile);
fos.write("fanrunqi".getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
//讀資料
try {
FileInputStream fis= new FileInputStream(saveFile);
int len =0;
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
while((len=fis.read(buf))!=-1){
sb.append(new String(buf, 0, len));
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- 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
- 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
我們也可以在 /Android/data/package_name/cache/目錄下做外部快取。
4、 網路儲存資料 |
HttpUrlConnection
HttpUrlConnection是Java.NET包中提供的API,我們知道Android
SDK是基於Java的,所以當然優先考慮HttpUrlConnection這種最原始最基本的API,其實大多數開源的聯網框架基本上也是基於JDK的HttpUrlConnection進行的封裝罷了,掌握HttpUrlConnection需要以下幾個步驟:
1、將訪問的路徑轉換成URL。
URL url = new URL(path);
2、通過URL獲取連線。
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3、設定請求方式。
conn.setRequestMethod(GET);
4、設定連線超時時間。
conn.setConnectTimeout(5000);
5、設定請求頭的資訊。
conn.setRequestProperty(User-Agent, Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0));
7、針對不同的響應碼,做不同的操作(請求碼200,表明請求成功,獲取返回內容的輸入流)
工具類:
public class StreamTools {
/**
* 將輸入流轉換成字串
*
* @param is
* 從網路獲取的輸入流
* @return
*/
public static String streamToString(InputStream is) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
baos.close();
is.close();
byte[] byteArray = baos.toByteArray();
return new String(byteArray);
} catch (Exception e) {
Log.e(tag, e.toString());
return null;
}
}
}
- 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
- 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
HttpUrlConnection傳送GET請求
public static String loginByGet(String username, String password) {
String path = http://192.168.0.107:8080/WebTest/LoginServerlet?username= + username + &password= + password;
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod(GET);
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream(); // 位元組流轉換成字串
return StreamTools.streamToString(is);
} else {
return 網路訪問失敗;
}
} catch (Exception e) {
e.printStackTrace();
return 網路訪問失敗;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
HttpUrlConnection傳送POST請求
public static String loginByPost(String username, String password) {
String path = http://192.168.0.107:8080/WebTest/LoginServerlet;
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod(POST);
conn.setRequestProperty(Content-Type, application/x-www-form-urlencoded);
String data = username= + username + &password= + password;
conn.setRequestProperty(Content-Length, data.length() + );
// POST方式,其實就是瀏覽器把資料寫給伺服器
conn.setDoOutput(true); // 設定可輸出流
OutputStream os = conn.getOutputStream(); // 獲取輸出流
os.write(data.getBytes()); // 將資料寫給伺服器
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
return StreamTools.streamToString(is);
} else {
return 網路訪問失敗;
}
} catch (Exception e) {
e.printStackTrace();
return 網路訪問失敗;
}
}
- 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
- 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
HttpClient
HttpClient是開源組織Apache提供的Java請求網路框架,其最早是為了方便Java伺服器開發而誕生的,是對JDK中的HttpUrlConnection各API進行了封裝和簡化,提高了效能並且降低了呼叫API的繁瑣,Android因此也引進了這個聯網框架,我們再不需要匯入任何jar或者類庫就可以直接使用,值得注意的是Android官方已經宣佈不建議使用HttpClient了。
HttpClient傳送GET請求
1、 建立HttpClient物件
2、建立HttpGet物件,指定請求地址(帶引數)
3、使用HttpClient的execute(),方法執行HttpGet請求,得到HttpResponse物件
4、呼叫HttpResponse的getStatusLine().getStatusCode()方法得到響應碼
5、呼叫的HttpResponse的getEntity().getContent()得到輸入流,獲取服務端寫回的資料
public static String loginByHttpClientGet(String username, String password) {
String path = http://192.168.0.107:8080/WebTest/LoginServerlet?username=
+ username + &password= + password;
HttpClient client = new DefaultHttpClient(); // 開啟網路訪問客戶端
HttpGet httpGet = new HttpGet(path); // 包裝一個GET請求
try {
HttpResponse response = client.execute(httpGet); // 客戶端執行請求
int code = response.getStatusLine().getStatusCode(); // 獲取響應碼
if (code == 200) {
InputStream is = response.getEntity().getContent(); // 獲取實體內容
String result = StreamTools.streamToString(is); // 位元組流轉字串
return result;
} else {
return 網路訪問失敗;
}
} catch (Exception e) {
e.printStackTrace();
return 網路訪問失敗;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
HttpClient傳送POST請求
1,建立HttpClient物件
2,建立HttpPost物件,指定請求地址
3,建立List,用來裝載引數
4,呼叫HttpPost物件的setEntity()方法,裝入一個UrlEncodedFormEntity物件,攜帶之前封裝好的引數
5,使用HttpClient的execute()方法執行HttpPost請求,得到HttpResponse物件
6, 呼叫HttpResponse的getStatusLine().getStatusCode()方法得到響應碼
7, 呼叫的HttpResponse的getEntity().getContent()得到輸入流,獲取服務端寫回的資料
public static String loginByHttpClientPOST(String username, String password) {
String path = http://192.168.0.107:8080/WebTest/LoginServerlet;
try {
HttpClient client = new DefaultHttpClient(); // 建立一個客戶端
HttpPost httpPost = new HttpPost(path); // 包裝POST請求
相關推薦
Android 資料儲存五種方式使用與總結
轉載自http://blog.csdn.net/amazing7/article/details/51437435
1、概述
Android提供了5種方式來讓使用者儲存持久化應用程式資料。根據自己的需求來做選擇,比如資料是否是應用程式私有的,是否能被其他程式訪
Android資料儲存五種方式總結
SharePreferences是用來儲存一些簡單配置資訊的一種機制,使用Map資料結構來儲存資料,以鍵值對的方式儲存,採用了XML格式將資料儲存到裝置中。例如儲存登入使用者的使用者名稱和密碼。只能在同一個包內使用,不能在不同的包之間使用,其實也就是說只能在創建它的應用
Android資料儲存五種方式
https://www.cnblogs.com/ITtangtang/p/3920916.html
SharedPreferences的基本使用-----存,刪,改,查:https://www.cnblogs.com/qianzf/p/7582400.html
Android Sha
Android常見資料儲存五種方式
本文介紹Android平臺進行資料儲存的五大方式,分別如下:
下面詳細講解這五種方式的特點
第一種: SharedPreferences儲存資料
適用範圍:儲存少量的資料,且這些資料的格式非常簡單:字串型、基本型別的值。
資料儲存(五種方式)SharedPreferences儲存
一.SharedPreferences儲存
1.使用SharedPreferences儲存資料時,不需要指定檔案字尾,字尾自動設定為*.xml。
2.儲存資料---SaveData.java
publicclass MySharedPreferencesDemo exte
資料儲存(五種方式二)-檔案儲存
檔案儲存
1.SharedPreference只能儲存一些簡單的資料,要想儲存更多型別的資料,需要使用檔案的儲存操作。有兩種形式:
形式一:直接利用Activity提供的檔案操作方法。此類操作的所有檔案路徑只能是“data\data\<packagename>
Hive中表的資料匯入(五種方式)
目錄
總結:
load:
insert:
建立表並載入資料(As Select):
location:
import:
總結:
總結:
hive中一共有五種資料匯出的方式:
①:load data方式,如果路徑是local是追加,若為HDFS則
servlet 資料儲存幾種方式和jsp 作用域
有5個物件儲存資料:
ServletContext ---application
當tomcat服務一啟動,資料儲存一致有效,當tomcat服務一停止,ServletContext物件消失。
session----session
當第一次使用者輸入一個網址,且帶有一些
SpringMVC的controller向jsp傳遞資料的五種方式詳解
第一種 使用model來儲存資料到前臺我的專案目錄為我的controller頁面程式碼@RequestMapping("/demo")
public String Model(Model model
Hibernate查詢資料的五種方式
1.導航物件圖查詢:根據已經載入的物件,導航到其他物件。
例如,對於已經載入的Customer物件,呼叫它getOrders().iterator()方法就可以導航到所有關聯的Order物件,假如在關聯級別使用了延遲載入檢索策略,那麼首次執行此方法時,Hibernate
Android資料的四種儲存方式----總結
作為一個完成的應用程式,資料儲存操作是必不可少的。因此,Android系統一共提供了四種資料儲存方式。分別是:SharePreference、SQLite、Content Provider和File。由於Android系統中,資料基本都是私有的的,都是存放於“data/data/程式包名”目錄
android 資料儲存的幾種方式
總體的來講,資料儲存方式有三種:一個是檔案,一個是資料庫,另一個則是網路。其中檔案和資料庫可能用的稍多一些,檔案用起來較為方便,程式可以自己定義格式;資料庫用起稍煩鎖一些,但它有它的優點,比如在海量資料時效能優越,有查詢功能,可以加密,可以加鎖,可以跨應用,跨平臺等等;網路
關於Android Activity之間傳遞資料的6種方式
使用Inten的putExtra傳遞
第一個Activity中
?
1 2 3 4 5 6
//建立意圖物件 Intent intent = new Intent(this,TwoActivity.class); //設定傳
Android資料儲存的方式
1.Android常用的資料儲存方式
File儲存
SharedPreferences儲存
SQLite輕量型資料庫
ContentProvider 四大元件之一
2.File儲存
最基本的一種資料儲存方式,不對儲存的內容進行任何的格式化處理,所有
【Android自助餐】Handler訊息機制完全解析(五)鳥瞰與總結
Android自助餐Handler訊息機制完全解析(五)鳥瞰與總結
Android自助餐Handler訊息機制完全解析五鳥瞰與總結
Message
MessageQueue
Handler
Looper
Spark-Streaming獲取kafka資料的兩種方式:Receiver與Direct的方
簡單理解為:Receiver方式是通過zookeeper來連線kafka佇列,Direct方式是直接連線到kafka的節點上獲取資料
回到頂部
使用Kafka的高層次Consumer API來實現。receiver從Kafka中獲取的資料都儲存在Spark Exec
Android資料儲存(3)SQLite簡介和簡單的登入與註冊原始碼
操作SQLite資料的基本操作步驟:
Android群:239123204
(在此不考慮用SQLiteOpenHelper類)
1.獲取SQLiteDatabase物件db建立資料庫或連線資料庫:SQLiteDatabasedb = SQLiteDatabase.op
儲存資料的幾種方式比較
機身記憶體讀取主要用個兩個類檔案輸入流(FileInputStream)和檔案輸出流(FileOutputStream):FileInputStream fileInput = this.openFileInput("test.txt") 第一個引數為
data/此程式包名/data/test.txt
android開發之為listview繫結資料的三種方式
第一種,使用simple adapter
simpleadapter 是最簡單的一種方式,但是其資料來源必須是map型別。
1.生成 SimpleAdapter()物件
2.設定資料來源
3.設定每個item的佈局
4.設定SimpleAdapter(Context con
android資料儲存的四種方案(二)
檔案流操作
二.openFileOutput和openFileInput
openFileOutput : 開啟要寫入的檔案,返回一個OutputStream物件
openFileInput:開啟