国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android的數(shù)據(jù)訪問技術研究

2014-03-16 09:21:54邢立國褚龍現(xiàn)
電子設計工程 2014年9期
關鍵詞:數(shù)據(jù)文件參數(shù)值應用程序

邢立國,褚龍現(xiàn)

(平頂山學院 河南 平頂山 467000)

目前大部分應用程序的主要功能都圍繞數(shù)據(jù)處理進行設計,如何高效安全地進行數(shù)據(jù)存儲和訪問成為各類應用設計中重點關注的問題[1]。存儲應用程序中的數(shù)據(jù)一般有兩種方式,分別是數(shù)據(jù)文件和數(shù)據(jù)庫。數(shù)據(jù)文件存儲數(shù)據(jù)方式簡潔,但是修改和查詢數(shù)據(jù)困難,所以主要用來存儲類型簡單且少量數(shù)據(jù);數(shù)據(jù)庫需要借助專門的管理系統(tǒng)進行管理,但是對數(shù)據(jù)進行增加、刪除、修改和查詢時非常便利,所以可以用來存儲需要經(jīng)常訪問的大量數(shù)據(jù)[2]。在Android應用程序中為了存儲和訪問數(shù)據(jù)也采用上述兩種方式,其中數(shù)據(jù)文件存儲可以選擇XML文件或基本文件[3],而數(shù)據(jù)庫則采用Android內置的SQLite進行管理。本文在分析Android中數(shù)據(jù)存儲方式的基礎上,提出了每種存儲方式下不同數(shù)據(jù)的訪問技術實現(xiàn)方法,并總結各種訪問技術的應用場景。

1 Android概述

Android是基于Linux內核的開放式操作系統(tǒng),允許用戶開發(fā)應用程序并自由發(fā)布[4]。Android平臺由四層框架構成,最底層是Linux內核層,提供各種驅動;第二層是庫和Android運行時,包含C/C++庫、Dalvike虛擬機和Java語言特定函數(shù),用來實現(xiàn)線程管理和內存管理等;第三層是應用程序框架層,是為應用程序提供框架服務的API;最上層是應用程序層,大多是使用Java開發(fā)的核心應用和用戶自定義的應用[5]。

目前,Android系統(tǒng)主要應用在智能手機和手持平板電腦中,基于Android的應用程序也越來越多。一個Android項目需要保存數(shù)據(jù)時,可以將數(shù)據(jù)文件或數(shù)據(jù)庫文件保存在res文件夾下,發(fā)布格式是一個經(jīng)過數(shù)字簽名的.apk文件包[6]。

2 數(shù)據(jù)訪問技術

Android應用中可以把數(shù)據(jù)保存到數(shù)據(jù)文件中,也可以保存到SQLite管理的數(shù)據(jù)庫中[7]。保存方式不同,訪問數(shù)據(jù)時應用技術也不相同。

2.1 文件讀寫

Android系統(tǒng)中的文件讀寫主要分為3類:一是基本文件讀寫,二是簡單共享文件讀寫,三是XML文件讀寫。

1)基本文件讀寫

為了保存數(shù)據(jù),Android允許應用程序將數(shù)據(jù)保存在指定位置的文件中。常見的有兩種位置:設備內部存儲器和SD卡。

①內部存儲器文件讀寫

當應用程序讀寫內部存儲器上文件時,要求文件保存在“/data/data/<package name>/files” 目錄中, 且通過簡化函數(shù)openFileOutput()和 openFileInput()進行操作。

其中寫文件提供了四種模式,分別是私有模式,只能被創(chuàng)建文件的程序或具有相同UID的程序訪問;追加模式,在文件結尾處添加新數(shù)據(jù);全局讀,允許任何程序讀取私有文件;全局寫,允許任何程序寫入私有文件。

②SD卡文件讀寫

SD卡是設備的擴展存儲,掛載到Android操作系統(tǒng)的“/mnt/sdcard”目錄。可以使用FileInputStream和FileOutputStre am進行讀寫。

2)簡單共享文件讀寫

為了實現(xiàn)不同進程之間共享數(shù)據(jù),Android提供了SharedPreferences類支持簡單數(shù)據(jù)共享。該文件保存在“/data/data/<package name>/shared_prefs”目錄中。

①寫入SharedPreferences

SharedPreferences sp= getSharedPreferences("config",Context.MODE_PRIVATE);

Editor editor=sp.edit();

editor.putString("uname","root");

editor.putString("pwd","12345");

editor.commit();

程序執(zhí)行完后得到config.xm l文件,文件主要內容如下:

<map>

<string name="uname">root</string>

<string name="pwd">12345</string>

</map>

②讀取SharedPreferences

SharedPreferences sp=getSharedPreferences("config",Context.MODE_PRIVATE);

String name=sp.getString("uname");

String pwd=sp.getString("pwd");

為實現(xiàn)共享,兩個應用的sharedUserId的內容要相同,同時雙方使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE模式讀寫內容。

3)XML 文件讀寫

讀寫XML文件的關鍵在于如何解析文件,常見的有兩種解析方式:SAX(Simple API for XML)和 DOM(Document ObjectModel)。兩種解析方式中,SAX占用資源少、速度快,但是不能進行查找和修改;DOM將XML記入內存可以反復查詢和修改,但是占用內存多、分析效率低[8]。

Android中提供了 Xm lResourceParser類,實現(xiàn)Xm lPullParser接口,是基于SAX的XML分析器。在使用Xm lResourceParser進行解析時主要依據(jù)各種事件類型進行處理。

2.2 數(shù)據(jù)庫存取

Android中內置的SQLite數(shù)據(jù)庫管理系統(tǒng)由C語言編寫,支持SQL操作[9]。默認情況下,數(shù)據(jù)庫文件保存在“/data/data/<應用程序包>/databases”中,也可以保存到任意有權限訪問的目錄。

訪問SQLite數(shù)據(jù)庫一般分為3個步驟:創(chuàng)建數(shù)據(jù)庫連接、數(shù)據(jù)操作和關閉連接。

1)創(chuàng)建連接

在Android開發(fā)中可以繼承SQLiteOpenHelper類實現(xiàn)數(shù)據(jù)庫連接的創(chuàng)建。下面代碼創(chuàng)建了到數(shù)據(jù)庫student.db的連接。

public class MyHpr extends SQLiteOpenHelper{//完成數(shù)據(jù)表創(chuàng)建}

于是,創(chuàng)建連接可以用下面語句完成:

MyHpr hp=new MyHpr(this);

SQLiteDatabase db=hp.getWritableDatabase();

2)數(shù)據(jù)操作

數(shù)據(jù)庫連接創(chuàng)建完成后可以執(zhí)行插入、修改、刪除和查詢操作。

①插入數(shù)據(jù)方法

ContentValues cv=new ContentValues();

cv.put(列名,列值);

db.insert(表名,null,cv);

②修改數(shù)據(jù)方法

ContentValues cv=new ContentValues();

cv.put(列名,列值);

db.update(表名,cv,where條件,修改條件中參數(shù)值);

③刪除數(shù)據(jù)方法

db.delete(表名,cv,where條件,修改條件中參數(shù)值);

④查詢數(shù)據(jù)方法

Cursor c=db.query(表名,select包含字段,where條件,條件中參數(shù)值,group子句,having子句,排序字段);

查詢操作將返回Cursor對象,通過該對象的moveToNext()方法可以讀取下一行數(shù)據(jù),通過getType(int ColIndex)方法可以獲取指定行中指定列的值。

3)關閉連接

當應用程序暫停、退出或不再需要操作數(shù)據(jù)庫時應該關閉數(shù)據(jù)庫連接:

db.close();

2.3 數(shù)據(jù)共享

Android應用程序運行在不同的進程空間中,因此不同應用程序的數(shù)據(jù)不能直接訪問。盡管使用SharedPreferences可以簡單實現(xiàn)跨進程訪問,但存在一定局限性。

ContentProvider是應用程序之間共享數(shù)據(jù)的一種接口機制,是一種更為高級的數(shù)據(jù)共享方法,可以指定需要共享的數(shù)據(jù),而其他應用程序則可在不知道數(shù)據(jù)來源、路徑的情況下,對共享數(shù)據(jù)進行查詢、添加、刪除和更新等操作。

ContentProvider使用的URI語法結構如下

content://<authority>/<data_path>/<id>

創(chuàng)建ContentProvider分為下面3個步驟:

1)繼承 ContentProvider

新建立的類繼承ContentProvider后,共有6個函數(shù)需要重載,如表1所示。

表1 ContentProvider重載Tab.1 ContentProvider overloaded functions

2)聲明 CONTENT_URI,實現(xiàn) UriMatcher

在新構造的ContentProvider類中,經(jīng)常需要判斷URI是單條數(shù)據(jù)還是多條數(shù)據(jù),最簡單的方法是構造一個UriMatcher。

private static final UriMatcher uMr;

static{

uMr=new UriMatcher(UriMatcher.NO_MATCH);

uMr.addURI(授權者,單條數(shù)據(jù)路徑,單條標示);

uMr.addURI(授權者,多條數(shù)據(jù)路徑,多條標示);

}

3)注冊 ContentProvider

在完成ContentProvider類的代碼實現(xiàn)后,需要在AndroidManifest.xm l文件中進行注冊。

<application android:icon="@drawable/icon"

android:label="@string/app_name">

<provider android:name=".自定義類名"android:authorities="授權名稱"/>

</application>

自定義ContentProvider完成后不需要直接調用類中的方法,而是通過ContentResolver對象進行數(shù)據(jù)操作。

ContentResolver r=getContentResolver();

ContentValues cv=new ContentValues();

UrinewUri=r.insert(uri,cv);

ContentValues cv1=new ContentValues();

int result=r.update(uri,cv1,where條件,條件中參數(shù)值);

int result1=r.delete(uri,where條件,條件中參數(shù)值);

Cursor cursor=r.query(uri,select包含字段,where條件,條件中參數(shù)值,排序字段);

3 應用場景分析

上述3種數(shù)據(jù)訪問技術都能夠實現(xiàn)Android中數(shù)據(jù)的存儲與查詢,但是各有其優(yōu)缺點。在實際項目開發(fā)過程中需要根據(jù)應用場景確定選用何種數(shù)據(jù)存儲及訪問方式。

當需要存儲結構化不強且數(shù)據(jù)量較少的數(shù)據(jù)時考慮使用文件存儲方式。若保存的是“鍵-值”應用程序配置信息,適合采用SharedPreferences方式,這樣既方便存取訪問又能實現(xiàn)簡單共享。

當數(shù)據(jù)量較大且經(jīng)常做數(shù)據(jù)訪問操作時考慮使用數(shù)據(jù)庫存儲方式。如果只在一個應用程序內部進行數(shù)據(jù)訪問,直接構造數(shù)據(jù)庫連接進行訪問即可;如果需要在多個應用之間進行數(shù)據(jù)共享訪問,則使用ContentProvider實現(xiàn)共享。

4 結束語

通過對Android應用中3種常見數(shù)據(jù)存儲訪問技術的研究,闡述了各種訪問方式的基本實現(xiàn)方法,最后簡單分析各種技術的應用場景。對數(shù)據(jù)訪問技術的研究為更好地理解Android數(shù)據(jù)存儲訪問機制和原理,在應用程序開發(fā)中合理選用高效的存儲訪問方式提供重要依據(jù)。

[1]燕超霞.基于Android的工程材料信息管理系統(tǒng)的設計與實現(xiàn)[D].鄭州:鄭州大學,2012.

[2]劉婕.基于Android系統(tǒng)的移動終端通訊錄的研究與設計[D].西安:西安電子科技大學,2012.

[3]倪紅軍.基于Android系統(tǒng)的數(shù)據(jù)存儲訪問機制研究[J].計算機技術與發(fā)展,2013,23(6):90-93.NIHong-jun.Study of data storage accessmechanism based on android system [J]. Computer Technology and Development,2013,23(6):90-93.

[4]姚昱昱,劉衛(wèi)國.Android的架構與應用開發(fā)研究[J].計算機系統(tǒng)應用,2008,17(11):110-112.YAO Yu-yu,LIUWei-guo.Study of Android architecture and its application development [J].Computer Systems &Applications,2008,17(11):110-112.

[5]公磊,周聰.基于Android的移動終端應用程序開發(fā)與研究[J].計算機與現(xiàn)代化,2008(8):85-89.GONG Lei,ZHOU Cong.Development and research ofmobile termination application based on Android[J].Computer and Modernization,2008(8):85-89.

[6]楊超.基于Android平臺的電子閱讀客戶端的設計與實現(xiàn)[D].北京:北京交通大學,2011.

[7]Reto Meier.Professional Android 4 Application Development[M].John Wiley&Sons,Inc.,2012.

[8]朱珊娜,李書琴,安福定.XML文檔到關系數(shù)據(jù)庫的轉換研究[J].計算機工程與設計,2008,29(21):5507-5509.ZHU Shan-na,LI Shu-qin,AN Fu-ding.Conversion from XML document to relational database [J].Computer Engineering and Design,2008,29(21):5507-5509.

[9]趙珂.基于Android移動終端預約掛號系統(tǒng)的設計與實現(xiàn)[D].武漢:武漢理工大學,2012.

猜你喜歡
數(shù)據(jù)文件參數(shù)值應用程序
例談不等式解法常見的逆用
不等式(組)參數(shù)取值范圍典例解析
2020 Roadmap on gas-involved photo- and electro- catalysis
刪除Win10中自帶的應用程序
電腦報(2019年12期)2019-09-10 05:08:20
逆向思維求三角函數(shù)中的參數(shù)值
數(shù)據(jù)文件恢復專題問答
數(shù)據(jù)文件安全管控技術的研究與實現(xiàn)
SQL數(shù)據(jù)文件恢復工具
Tekla Structure數(shù)據(jù)文件交互格式分析
關閉應用程序更新提醒
電腦迷(2012年15期)2012-04-29 17:09:47
霍林郭勒市| 启东市| 融水| 呼图壁县| 乌鲁木齐县| 库车县| 哈密市| 沈丘县| 克山县| 宾阳县| 裕民县| 宿松县| 肥城市| 田林县| 剑阁县| 广灵县| 仪陇县| 那坡县| 崇阳县| 元阳县| 尚义县| 皮山县| 西昌市| 株洲市| 乐平市| 海门市| 石嘴山市| 黔西县| 嘉黎县| 汕头市| 葫芦岛市| 涞水县| 梧州市| 岳普湖县| 东乌珠穆沁旗| 清水河县| 都匀市| 临桂县| 嘉鱼县| 高青县| 鄱阳县|