![Android提供了5種方式存儲數(shù)據(jù)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/87108c7c-454b-4591-8902-36632b4f3ff6/87108c7c-454b-4591-8902-36632b4f3ff61.gif)
![Android提供了5種方式存儲數(shù)據(jù)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/87108c7c-454b-4591-8902-36632b4f3ff6/87108c7c-454b-4591-8902-36632b4f3ff62.gif)
![Android提供了5種方式存儲數(shù)據(jù)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/87108c7c-454b-4591-8902-36632b4f3ff6/87108c7c-454b-4591-8902-36632b4f3ff63.gif)
![Android提供了5種方式存儲數(shù)據(jù)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/87108c7c-454b-4591-8902-36632b4f3ff6/87108c7c-454b-4591-8902-36632b4f3ff64.gif)
![Android提供了5種方式存儲數(shù)據(jù)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/16/87108c7c-454b-4591-8902-36632b4f3ff6/87108c7c-454b-4591-8902-36632b4f3ff65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Android提供了5種方式存儲數(shù)據(jù)-使用SharedPreferences存儲數(shù)據(jù);-文件存儲數(shù)據(jù);-SQLite數(shù)據(jù)庫存儲數(shù)據(jù);-使用ContentProvider存儲數(shù)據(jù);-網(wǎng)絡(luò)存儲數(shù)據(jù)一:使用SharedPreferences存儲數(shù)據(jù)首先說明SharedPreferences存儲方式,它是Android提供的用來存儲一些簡單配置信息的一種機制,例如:登錄用戶的用戶名與密碼。其采用了Map數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù),以鍵值的方式存儲,可以簡單的讀取與寫入,具體實例如下:void ReadSharedPreferences()String strName,strPassword;SharedPre
2、ferences user = getSharedPreferences(“user_info”,0); strName = user.getString(“NAME”,”); strPassword = user getString(“PASSWORD”,”);void WriteSharedPreferences(String strName,String strPassword)SharedPreferences user = getSharedPreferences(“user_info”,0);uer.edit();user.putString(“NAME”, strName);us
3、er.putString(“PASSWORD” ,strPassword);mit();數(shù)據(jù)讀取與寫入的方法都非常簡單,只是在寫入的時候有些區(qū)別:先調(diào)用edit()使其處于編輯狀態(tài),然后才能修改數(shù)據(jù),最后使用commit()提交修改的數(shù)據(jù)。實際上SharedPreferences是采用了XML格式將數(shù)據(jù)存儲到設(shè)備中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。以上面的數(shù)據(jù)存儲結(jié)果為例,打開后可以看到一個user_info.xml的文件,打開后可以看到:<?xml version=”1.0 enco
4、ding=”UTF-8?><map><string name=”NAME”>moandroid</string><string name=” PASSWORD”>SharedPreferences</string></map>使用SharedPreferences是有些限制的:只能在同一個包內(nèi)使用,不能在不同的包之間使用。使用步驟:存數(shù)據(jù):使用SharedPreferences保存數(shù)據(jù)要經(jīng)過4個步驟:獲取對象、創(chuàng)建編輯器、修改內(nèi)容、提交修改。接下來就仔細(xì)查看這四個步驟究竟是怎樣的一個過程:1.獲取對象通過getSha
5、redPreferences()方法獲取一個SharedPreferences對象,以方便對其進(jìn)行相關(guān)操作,方法如下:getSharedPreferences("Content", Context.MODE_PRIVATE); 2.創(chuàng)建一個Editor編輯器在SharedPreferences中要編輯信息,必須取得一個編輯器,也就是Editor。Editor對象的作用是提供一些方法以便使用者修改XML文件中的內(nèi)容,如添加字符串或整數(shù)等。方法如下:SharedPreferences.edit();3.使用Editor修改內(nèi)容SharedPreferences根據(jù)方法名創(chuàng)建一個
6、<String></String>節(jié)點,根據(jù)這個方法的參數(shù)向節(jié)點中添加內(nèi)容。方法如下:putString("String", data);4.提交內(nèi)容將數(shù)據(jù)修改好之后,也就是putString()或其他put()方法執(zhí)行完后,要將這個修改提交給SharedPreferences,以通知其將內(nèi)容寫入到XML文件中。使用的方法如下:mit();讀數(shù)據(jù):只要兩個步驟就可以順利取出保存的數(shù)據(jù)并使用:1.獲得SharedPreferences對象獲得的方法如下:getSharedPreferences("Content", Context.
7、MODE_PRIVATE); 2.取出Key對應(yīng)的Value即內(nèi)容我們只要使用getString()等方法就可以了:SharedPreferences.getString()SharedPreferences.getBoolean()SharedPreferences.getFloat()SharedPreferences.getInt()SharedPreferences.getLong()二:文件存儲數(shù)據(jù)文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法
8、來讀取設(shè)備上的文件。FilterInputStream, FilterOutputStream等可以到Java io package說明中去詳細(xì)學(xué)習(xí),不再此詳細(xì)說明,具體實例如下:String fn = “moandroid.log”;FileInputStream fis = openFileInput(fn);FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);除此之外,Android還提供了其他函數(shù)來操作文件,詳細(xì)說明請閱讀android sdk。1.文件保存在哪里事實上,文件保存的路徑與SharedPrefere
9、nces的保存路徑差不多,位于/data/data/<package name>/files下。2.文件操作的一些方法知道文件保存的位置和形式后,接下來需要知道操作文件的一些重要的方法,如表所示:操作文件的重要方法含義openFileInput()打開應(yīng)用程序文件以便讀取openFileOutput()創(chuàng)建應(yīng)用程序文件以便寫入deleteFile()通過名稱刪除文件fileList()獲得所有位于/data/data/<package name>/files下的文件列表getFileDir()獲得/data/data/<package name>/files
10、子目錄對象getCacheDir()獲得/data/data/<package name>/cache子目錄對象getDir()根據(jù)名稱創(chuàng)建或獲取一個子目錄在程序默認(rèn)位置創(chuàng)建和寫入文件我們知道在Java中通過使用流來讀寫文件,要創(chuàng)建一個文件首先要建立一個輸出流。在Android中同樣如此,我們依靠openFileOutput()來獲得一個輸出流。它將在上一節(jié)中展示的位置創(chuàng)建一個文件,使用一個流要3個步驟:1.獲得一個輸出流對象獲得一個輸出流對象以進(jìn)行文件操作,使用openFileOutput()方法可以很方便的獲得,如下所示:openFileOutput(“myFile.txt”,
11、Context.MODE_PRIVATE);2.向流中寫入數(shù)據(jù)獲得了輸出流之后我們需要向流中添加我們需要添加的信息了,同樣非常方便,使用write()方法就可以了:write(data.getBytes();3.關(guān)閉流當(dāng)數(shù)據(jù)寫入完畢后,使用close()方法可以關(guān)閉輸出流,方法如下所示:fos.close();在默認(rèn)位置讀取文件與上面類似,Android提供了讀取文件的簡便方法,同樣需要3個步驟:1. 創(chuàng)建輸入流首先,得到了一個輸入字節(jié)流,參數(shù)是文件名。fis = openFileInput(“myFile”);接著,將其轉(zhuǎn)換為字符流,這樣可以一個字符一個字符地讀取以便顯示中文。isr = n
12、ew InputStreamReader(fis);br = new BufferedReader(isr);最后,我們又將其包裝為緩沖流,這樣可以一段一段地讀取,減少讀寫的次數(shù),保護(hù)硬盤。2. 讀取數(shù)據(jù)從流中獲得數(shù)據(jù)同樣非常方便,這里沒有使用read()方法而使用了readLine()方法,原因下文也會給出,代碼如下:String s = null;S = (br.readLine();3. 關(guān)閉輸入流這里記得每個流都要關(guān)閉哦:fis.close();isr.close();br.close();三SQLite數(shù)據(jù)庫本節(jié)將講解使用Android自帶的關(guān)系型數(shù)據(jù)庫SQLite。它是一個基于文件
13、的輕量級數(shù)據(jù)庫,為嵌入式設(shè)備量身打造而成。每個應(yīng)用程序創(chuàng)建的數(shù)據(jù)庫都是私有的,但是ContentProvider可以把數(shù)據(jù)共享給其他的應(yīng)用程序。本節(jié)中讀者將學(xué)習(xí)到創(chuàng)建和刪除數(shù)據(jù)庫,創(chuàng)建和刪除表,以及插入記錄、更新記錄、刪除記錄和查詢記錄等操作。1.怎樣創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫有多種方法,最簡單的無疑是使用Context的openOrCreateDatabase()方法了。當(dāng)然還有更加強大的方法,比如通過SQLiteOpenHelper類更有效地管理它。使用openOrCreateDatabase()方法創(chuàng)建數(shù)據(jù)庫語法格式如下:ContextWrapper.openOrCreateDatabase(
14、String name, int mode, CursorFactory factory)2.數(shù)據(jù)庫文件被保存在哪里事實上,與SharedPreferences類似,數(shù)據(jù)庫文件被保存在如下的目錄下:/data/data/package name/databases3. 設(shè)置數(shù)據(jù)庫創(chuàng)建完數(shù)據(jù)庫后,為了更安全而有效地使用它,我們還需要對它進(jìn)行一定的配置,主要的方法有3個,分別是:(1)設(shè)置本地化:db.setLocale(Locale.getDefault();(2)設(shè)置線程安全鎖:db.setLockingEnabled(true);(3)設(shè)置版本:db.setVersion(1);4.關(guān)閉數(shù)據(jù)
15、庫當(dāng)我們不再需要使用數(shù)據(jù)庫時可以考慮將其關(guān)閉,關(guān)閉的方法非常簡單,只需要調(diào)用方法:db.close();5.刪除數(shù)據(jù)庫有些時候基于某種需求我們需要將數(shù)據(jù)庫徹底刪除,方法同樣非常簡單:Context.deleteDatabase();創(chuàng)建和刪除表1. 創(chuàng)建表創(chuàng)建了數(shù)據(jù)庫之后,我們接下來的工作就是在數(shù)據(jù)庫中創(chuàng)建表了,只有擁有了表,數(shù)據(jù)庫才有意義。創(chuàng)建表的方法是執(zhí)行相應(yīng)的SQL語句。例如,要創(chuàng)建一個名為userInfo_brief的表,需要的SQL語句為:CREATE TABLE userInfo_brief (id INTEGER PRIMARY KEY AUTOINCREMENT,name TE
16、XT,password TEXT);創(chuàng)建person表db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");2. 刪除表相應(yīng)的,如果要刪除表userInfo_brief ,其SQL語句為:DROP TABLE userInfo_brief;與其對應(yīng)的Java代碼為:Sring sql = “DROP TABLE ”+ TABLENAME_1 + “;”;db.execSQL(sql)操作記錄操作記錄大致為插入操作、更新操作以及
17、刪除操作。SQLiteDatabase類提供了3個簡單的方法來完成對應(yīng)的操作,它們分別是:SQLiteDatabase.insert() SQLiteDatabase.update()SQLiteDatabase.delete()1. 插入記錄插入記錄時,我們需要使用方法:SQLiteDatabase.insert(String table, String nullColumnHack, ContentValues values)/ContentValues以鍵值對的形式存放數(shù)據(jù)ContentValues cv = new ContentValues();cv.put("name&q
18、uot;, );cv.put("age", person.age);/插入ContentValues中的數(shù)據(jù)db.insert("person", null, cv);2. 更新記錄更新記錄時,我們需要使用方法:SQLiteDatabase.update(String table, ContentValues values, String whereClause, String whereArgs)3. 刪除記錄刪除記錄時,我們需要使用方法:SQLiteDatabase.delete(String table, String whe
19、reClause, String whereArgs)1. 使用query()查詢方法查詢數(shù)據(jù):Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String"33");while (c.moveToNext() int _id = c.getInt(c.getColumnIndex("_id");String name = c.getString(c.getColumnIndex("name");int age = c.get
20、Int(c.getColumnIndex("age");c.close();/刪除數(shù)據(jù)db.delete("person", "age < ?", new String"35");/關(guān)閉當(dāng)前數(shù)據(jù)庫db.close();/刪除test.db數(shù)據(jù)庫/deleteDatabase("test.db");SQLite數(shù)據(jù)庫提供了一些方法可以使我們很方便的執(zhí)行查詢,而避免了寫一些繁瑣的SELECT查詢語句,當(dāng)然,你也不必?fù)?dān)心,因為它提供的方法其實與SELECT語句一脈相承。其語法格式如下:SQLit
21、eDatabase.query(String table, String columns, String selection, String selectionArgs, String groupBy, String having, String orderBy)2. 使用Cursor對象保存查詢結(jié)果Cursor對象只能暫時地保存數(shù)據(jù),如果只需要完成一些簡單的操作可以快速地執(zhí)行,執(zhí)行完后關(guān)閉它。接下來學(xué)習(xí)一些經(jīng)常使用的Cursor對象的方法;(1)Cursor.getCount()獲得Cursor對象中記錄條數(shù),可以理解為有幾行。(2)Cursor.getColumnCount(),獲得Cur
22、sor對象中記錄的屬性個數(shù),可以理解為有幾列。(3)Cursor.moveToFirst(),將Cursor對象的指針指向第一條記錄。(4)Cursor.moveToNext(),將Cursor對象的指針指向嚇一跳。(5)Cursor.isAfterLast(),判斷Cursor對象的指針是否指向最后一條記錄。(6)Cursor.close(),關(guān)閉Cursor對象。(7)Cursor.deactivate(),取消激活狀態(tài)。(8)Cursor.requery(),重新查詢刷新數(shù)據(jù)。3. 執(zhí)行查詢操作4. 使用SQLiteQueryBuilder如果我們需要執(zhí)行多表查詢就要使用SQLiteQu
23、eryBuilder,接下來我們需要執(zhí)行多表查詢:SELECT user_,User_brief.password,User_detail.age,User_detail.sexFROMuser_brief, user_detailWHERE user_ = user_ AND user_ = “wes”O(jiān)RDERBY age ASC為了能更好地管理數(shù)據(jù)庫,Android SDK為我們提供了數(shù)據(jù)庫的一個幫助類SQLiteOpenHelper。要使用SQLiteOpenHelper類需要如下步驟:1.繼承SQLit
24、eOpenHelper類2. 得到幫助類的對象通過幫助類的構(gòu)造方法可以順利地得到幫助類的對象:DatabaseHelper helper = new DatabaseHelper(Context context, String name, CursorFactory factory, int version)3. 獲得數(shù)據(jù)庫順利地獲得數(shù)據(jù)庫幫助類的對象后,無論在什么時候,我們都可以很方便地得到一個可讀或者可寫數(shù)據(jù)庫,得到可寫數(shù)據(jù)庫的具體語法格式如下:SQLiteOpenHelper.getWritableDatabase()或者可以通過以下方法得到可讀數(shù)據(jù)庫:SQLiteOpenHelper.
25、getReadableDatabase()事務(wù)的操作public void add(List<Person> persons) db.beginTransaction();/開始事務(wù) try for (Person person : persons) db.execSQL("INSERT INTO person VALUES(null, ?, ?, ?)", new O, person.age, ); db.setTransactionSuccessful();/設(shè)置事務(wù)成功完成 finally db.end
26、Transaction();/結(jié)束事務(wù) 四:ContentProvider1、ContentProvider簡介當(dāng)應(yīng)用繼承ContentProvider類,并重寫該類用于提供數(shù)據(jù)和存儲數(shù)據(jù)的方法,就可以向其他應(yīng)用共享其數(shù)據(jù)。雖然使用其他方法也可以對外共享數(shù)據(jù),但數(shù)據(jù)訪問方式會因數(shù)據(jù)存儲的方式而不同,如:采用文件方式對外共享數(shù)據(jù),需要進(jìn)行文件操作讀寫數(shù)據(jù);采用sharedpreferences共享數(shù)據(jù),需要使用sharedpreferences API讀寫數(shù)據(jù)。而使用ContentProvider共享數(shù)據(jù)的好處是統(tǒng)一了數(shù)據(jù)訪問方式。2、Uri類簡介Uri代表了要操作的數(shù)據(jù),Uri主要包含了兩部分
27、信息:1.需要操作的ContentProvider ,2.對ContentProvider中的什么數(shù)據(jù)進(jìn)行操作,一個Uri由以下幾部分組成:1.scheme:ContentProvider(內(nèi)容提供者)的scheme已經(jīng)由Android所規(guī)定為:content:/。2.主機名(或Authority):用于唯一標(biāo)識這個ContentProvider,外部調(diào)用者可以根據(jù)這個標(biāo)識來找到它。3.路徑(path):可以用來表示我們要操作的數(shù)據(jù),路徑的構(gòu)建應(yīng)根據(jù)業(yè)務(wù)而定,如下:要操作contact表中id為10的記錄,可以構(gòu)建這樣的路徑:/contact/10要操作contact表中id為10的記錄的na
28、me字段, contact/10/name要操作contact表中的所有記錄,可以構(gòu)建這樣的路徑:/contact?要操作的數(shù)據(jù)不一定來自數(shù)據(jù)庫,也可以是文件等其他存儲方式,如下:要操作xml文件中contact節(jié)點下的name節(jié)點,可以構(gòu)建這樣的路徑:/contact/name如果要把一個字符串轉(zhuǎn)換成Uri,可以使用Uri類中的parse()方法,如下:Uri uri = Uri.parse("content:/vider.contactprovider/contact")3、UriMatcher、ContentUrist和Conten
29、tResolver簡介因為Uri代表了要操作的數(shù)據(jù),所以我們很經(jīng)常需要解析Uri,并從Uri中獲取數(shù)據(jù)。Android系統(tǒng)提供了兩個用于操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便于我們的開發(fā)工作。UriMatcher:用于匹配Uri,它的用法如下:1.首先把你需要匹配Uri路徑全部給注冊上,如下:/常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);/如果match()方法匹配content:/c
30、vider.contactprovider/contact路徑,返回匹配碼為1uriMatcher.addURI(“vider.contactprovider”, “contact”, 1);/添加需要匹配uri,如果匹配就會返回匹配碼/如果match()方法匹配 content:/vider.contactprovider/contact/230路徑,返回匹配碼為2uriMatcher.addURI(“com.changcheng.sqlite.
31、provider.contactprovider”, “contact/#”, 2);/#號為通配符2.注冊完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法對輸入的Uri進(jìn)行匹配,如果匹配就返回匹配碼,匹配碼是調(diào)用addURI()方法傳入的第三個參數(shù),假設(shè)匹配content:/vider.contactprovider/contact路徑,返回的匹配碼為1。ContentUris:用于獲取Uri路徑后面的ID部分,它有兩個比較實用的方法:withAppendedId(uri, id)用于為路徑加上ID部分parse
32、Id(uri)方法用于從路徑中獲取ID部分ContentResolver:當(dāng)外部應(yīng)用需要對ContentProvider中的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢操作時,可以使用ContentResolver 類來完成,要獲取ContentResolver 對象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,來操作數(shù)據(jù)。1.什么是ContentProviderContentProvider機制可以幫助開發(fā)者在多個應(yīng)用中操作數(shù)據(jù),包括存儲、修改和刪除等。這也是在應(yīng)用間共享數(shù)據(jù)的唯一
33、方式。一個ContentProvider類實現(xiàn)了一組標(biāo)準(zhǔn)的接口,它們是:(1)ContentProvider.insert(Uri arg0, ContentValues arg1)(2)ContentProvider.query(Uri arg0, String arg1, String arg2, String arg3, String arg4)(3)ContentProvider.update(Uri arg0, ContentValues arg1, String arg2, String arg3)(4)ContentProvider.delete(Uri arg0, String
34、 arg1, String arg2)(5)ContentProvider.getType(Uri arg0)2. 什么是URIURI是Universal Resource Identifier的縮寫,也就是通用資源標(biāo)志符的意思。它的作用就是告訴使用者,數(shù)據(jù)的具體位置,所以在URI中一定包含有數(shù)據(jù)的路徑。事實上,在Android的Uri中主要包括3個部分:(1)“content:/”,Android命名機制規(guī)定所有的內(nèi)容提供者Uri必須以“content:/”開頭。(2)數(shù)據(jù)路徑,正如前文所說,通過該路徑其他的應(yīng)用程序可以順利地找到具體數(shù)據(jù)。(3)ID,這個是可選的,如果不填表示取得所有的數(shù)據(jù)
35、。3. ContentResolverAndroid的數(shù)據(jù)共享機制中,ContentProvider作為提供者出現(xiàn),而ContentResolver則作為消費者出現(xiàn)。通過getContentResolver()可以得到當(dāng)前應(yīng)用的ContentResolver對象。要實現(xiàn)一個ContentResolver同樣需要實現(xiàn)5個接口,與ContentProvider一一對應(yīng):(1)ContentResolver. delete(Uri url,String where,String selectionArgs)(2)ContentResolver .update(Uri uri,ContentValue
36、svalues,Stringwhere,StringselectionArgs)(3)ContentResolver.query(Uriuri,Stringprojection,Stringselection,StringselectionArgs,String sortOrder)(4)ContentResolver. insert(Uri url,ContentValues values) (5)ContentResolver. getType(Uri url)獲得手機中聯(lián)系人的實例:(1)查詢聯(lián)系人列表獲得Cursor對象,方法為:managedQuery(Uri uri, String
37、 projection, String selection, String selectionArgs, String sortOrder) (2)新建Adapter: ListAdapter adapter = new SimpleCursorAdapter(Context context, int layout, Cursor c, String from, int to)(3)設(shè)置Adapter setListAdapter(adapter);private StringBuilder getContacts() StringBuilder sbLog
38、 = new StringBuilder(); / 得到ContentResolver對象 ContentResolver cr =this.getContentResolver();
39、0; / 取得電話本中開始一項的光標(biāo),主要就是查詢"contacts"表 Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if(!cursor.moveToFirst()
40、160; sbLog.append("獲取內(nèi)容為空!"); return sbLog; if(cursor.moveToFirst()
41、
42、; / 取得聯(lián)系人名字(顯示出來的名字),實際內(nèi)容在ContactsContract.Contacts中 int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); String name = cursor.getString
43、(nameIndex); sbLog.append("name=" + name + "");
44、; / 取得聯(lián)系人ID String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID);
45、160; / 根據(jù)聯(lián)系人ID查詢對應(yīng)的電話號碼 Cursor phoneNumbers = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
46、 + contactId, null, null);
47、0; / 取得電話號碼(可能存在多個號碼) while (phoneNumbers.moveToNext()
48、; String strPhoneNumber = phoneNumbers.getString(phoneNumbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
49、160; sbLog.append("Phone=" + strPhoneNumber + ""); phoneNumbers
50、.close(); / 根據(jù)聯(lián)系人ID查詢對應(yīng)的email Cursor
51、 emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId
52、, null, null); / 取得email(可能存在多個email)
53、; while (emails.moveToNext() String strEmail = emails.getString(emails.getColumnIndex(Con
54、tactsContract.CommonDataKinds.Email.DATA); sbLog.append("Email=" + strEmail + "");
55、 emails.close(); cursor.close(); Log.e("-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保險代理居間合同委托書
- 服裝企業(yè)辦公大廈居間協(xié)議
- 液態(tài)化學(xué)試劑配送合同
- 2025年度工業(yè)控制系統(tǒng)安全工程師勞動合同
- 娛樂場所泔水運輸合作協(xié)議
- 家具城配送服務(wù)合同模板
- 煤矸石清運施工方案
- 綿陽市道路施工方案
- 完善教育評價體系:深化改革的策略與路徑探索
- 初中藏文版數(shù)學(xué)試卷
- 公司安全生產(chǎn)事故隱患內(nèi)部報告獎勵工作制度
- H3CNE認(rèn)證考試題庫官網(wǎng)2022版
- 感統(tǒng)訓(xùn)練培訓(xùn)手冊(適合3-13歲兒童)
- 公司章程范本(完整版)
- 廠房委托經(jīng)營管理合同范本
- 《保險科技》課件-第二章 大數(shù)據(jù)及其在保險領(lǐng)域中的應(yīng)用
- 父母贈與田地協(xié)議書范本
- 中藥甘草課件
- 解讀國有企業(yè)管理人員處分條例(2024)課件(全文)
- 煙草企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化規(guī)范1-200題附有答案
- DL∕T 1870-2018 電力系統(tǒng)網(wǎng)源協(xié)調(diào)技術(shù)規(guī)范
評論
0/150
提交評論