Android應(yīng)用程序開發(fā)技術(shù) 課件 第6、7章 數(shù)據(jù)存儲、Intent與BroadcastReceiver_第1頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6、7章 數(shù)據(jù)存儲、Intent與BroadcastReceiver_第2頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6、7章 數(shù)據(jù)存儲、Intent與BroadcastReceiver_第3頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6、7章 數(shù)據(jù)存儲、Intent與BroadcastReceiver_第4頁
Android應(yīng)用程序開發(fā)技術(shù) 課件 第6、7章 數(shù)據(jù)存儲、Intent與BroadcastReceiver_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第6章數(shù)據(jù)存儲Android應(yīng)用程序開發(fā)技術(shù)

Android中有三種存儲方式,分別是文件存儲、SharedPreferences存儲和數(shù)據(jù)庫存儲。文件存儲主要用于存儲資源文件如日記等。SharedPreferences存儲主要用于程序中的少量數(shù)據(jù)存儲,例如應(yīng)用程序的登錄界面中的用戶名和密碼等數(shù)據(jù)。數(shù)據(jù)庫存儲主要用于程序中有大量的數(shù)據(jù)需要存儲,在Android中內(nèi)置了SQLite數(shù)據(jù)庫。第六章數(shù)據(jù)存儲

6.1文件存儲 6.2SharedPreferences存儲 6.3SQLite數(shù)據(jù)庫存儲內(nèi)容安排6.1文件存儲

基于文件流的讀取與寫入是Android平臺上的數(shù)據(jù)存取方式之一。如果使用Java語言開發(fā)Android程序就可以將Java提供一整套完整的IO流操作應(yīng)用于程序開發(fā)。如FileInputStream、FileOutputStream等。Android同樣支持以流的方式來訪問手機(jī)存儲器上的文件。6.1.1使用IO流操作文件的常用方法

可以通過Android包中提供的Contex對象的如下方法:openFileInput和openFileOutput來分別獲取FileInputStream和FileOutputStream。 1.FileInputStreamopenFileInput(Stringname)

打開應(yīng)用程序私有目錄下由參數(shù)fileName指定的私有文件以讀入數(shù)據(jù),返回一個FileInputStream對象。參數(shù)mode的含義如表所示。常量含義MODE_PRIVATE默認(rèn)模式,表示該文件是私有數(shù)據(jù)文件,只能被應(yīng)用自身訪問,寫入內(nèi)容會覆蓋原文件內(nèi)容。MODE_APPEND

改模式會檢查文件是否存在,如果文件已存在就向該文件的末尾繼續(xù)寫入數(shù)據(jù),否則創(chuàng)建文件。MODE_WORLD_READABLE所有的應(yīng)用程序?qū)υ撐募哂凶x的權(quán)限。(出于安全不建議使用)MODE_WORLD_WRITEABLE

所有的應(yīng)用程序?qū)υ撐募哂袑懙臋?quán)限。(出于安全不建議使用)6.1.1使用IO流操作文件的常用方法【例6-1】利用本地文件存儲和加載記事本信息,運行效果如圖所示。屏幕下方的“保存”按鈕可以將輸入的信息存儲到本地文件“note.txt”中,“加載”按鈕可以將之前保存到文件的信息加載到文本框中顯示。6.1.2文件操作舉例

6.1文件存儲

6.2SharedPreferences存儲 6.3SQLite數(shù)據(jù)庫存儲內(nèi)容安排6.2SharedPreferences存儲

在應(yīng)用程序中通常會有保存用戶使用偏好設(shè)置的需求。對于這類信息在Android中通常采用一個輕量級的文件存儲類—SharedPreferences將信息保存在本機(jī)的應(yīng)用程序包名\shared_prefs目錄下的特定文件中。SharedPreferences是用xml文件存放數(shù)據(jù)。文件存放在/data/data/<packagename>/shared_prefs目錄下,使用鍵-值對(Key-Value)形式來存儲數(shù)據(jù)。6.2.1SharedPreferences接口

SharedPreferences是android.content包提供的接口,常用方法如表所示。方法名功能說明boolean contains(Stringkey)檢查是否包含指定key的數(shù)據(jù)SharedPreferences.Editoredit()返回SharedPreferences.Editor編輯對象Map<String,?> getAll()獲取SharedPreferences.Editor中所有key-value對,返回類型為Mapboolean getXxx(Stringkey,XxxdefValue)返回SharedPreferences中指定key的數(shù)據(jù),如果key不存在,則返回默認(rèn)值defValue,Xxx是數(shù)據(jù)類型,支持boolean、float、int、long、String和StringSet6.2.1SharedPreferences接口SharedPreferences.Editor提供的常用方法如表所示。方法名功能說明SharedPreferences.Editor clear()清空SharedPreferences中的所有數(shù)據(jù)SharedPreferences.Editorremove(Stringkey)刪除SharedPreferences中key指定的數(shù)據(jù)SharedPreferences.EditorputXxx(Stringkey,Xxxvalue)將指定key的數(shù)據(jù)保存到SharedPreferences對象中,Xxx是數(shù)據(jù)類型,支持boolean、float、int、long、String和StringSetboolean commit()Editor數(shù)據(jù)寫入完成后使用該方法將數(shù)據(jù)直接存儲到文件中去,如果成功返回true,否則返回false。voidapply()與commit()方法類似,差別是沒有返回值,且只實時更新SharedPreferences內(nèi)存中的數(shù)據(jù),對SharedPreferences文件的更新是異步的。6.2.2SharedPreferences操作步驟1.數(shù)據(jù)保存的步驟獲得SharedPreferences對象。SharePreferences本身是一個接口,不能直接實例化,可以通過Context環(huán)境上下文對象提供的getSharedPreferences()方法來獲取SharePreferences對象實例。2.數(shù)據(jù)讀取的步驟獲得SharedPreferences對象;通過SharedPreferences對象的getXXX方法獲取數(shù)據(jù)。6.2.3SharedPreferences應(yīng)用舉例【例6-2】利用SharedPreferences存儲APP登錄頁面的賬號和密碼。運行效果如圖所示。用戶單擊“登錄”按鈕后,如果用戶勾選了“記住密碼”復(fù)選框,就將本次用戶輸入的賬戶和密碼鍵值對存儲到本機(jī)的SharedPreferences文件中,下次用戶登錄時就直接顯示存儲的賬號和密碼信息。6.2.3SharedPreferences應(yīng)用舉例1.新建工程

新建工程名為xsyu.jsj.samp_sharedprefs的空白工程。工程中包含兩個布局文件和兩個Activity文件,分別對應(yīng)登錄頁面(activity_login.xml和LoginActivity.java)和登錄后的主頁面(activity_main.xml和MainActivity.java)。2.實現(xiàn)登錄頁面的布局文件登錄頁面布局如圖所示,包含兩個TextView、兩個EditView、一個CheckBox和一個Button組件。6.2.3SharedPreferences應(yīng)用舉例文件activity_login.xml部分代碼如下所示。6.2.3SharedPreferences應(yīng)用舉例3.定義成員變量并綁定組件在LoginActivity.java文件中,為LoginActivity類增加下面三個成員變量。

EditTextetusername,etpwd;CheckBoxcbremember;SharedPreferencessharedPreferences;然后編寫initView()方法實現(xiàn)組件成員變量的綁定,并在onCreate()方法中調(diào)用該方法。6.2.3SharedPreferences應(yīng)用舉例4.在登錄按鈕點擊事件處理方法中利用SharedPreferences文件保存賬號和密碼。activity_login.xml已經(jīng)為登錄頁面中的“登錄”按鈕設(shè)置了組件的onClick單擊事件的方法名是login(),該方法的功能是根據(jù)用戶對“記住密碼”CheckBox組件的設(shè)置情況來決定是否將用戶輸入的賬號和密碼保存在本機(jī)應(yīng)用程序包目錄\shared_prefs\account.xml文件中。

6.2.3SharedPreferences應(yīng)用舉例login(Viewview)的完整代碼如下。5.實現(xiàn)頁面加載時讀取上次保存在SharedPreferences文件中的賬號和密碼。如果用戶勾選了“記住密碼”,那么下一次在登錄時就應(yīng)當(dāng)將存儲在account.xml文件中的賬號和

密碼讀取并顯示在登錄界面中。accountread()代碼如下。

6.2.3SharedPreferences應(yīng)用舉例

6.1文件存儲 6.2SharedPreferences存儲

6.3SQLite數(shù)據(jù)庫存儲內(nèi)容安排6.3SQLite數(shù)據(jù)庫存儲

應(yīng)用程序都需要存儲數(shù)據(jù),前面介紹的文件存儲可以保存一些簡單的數(shù)據(jù),SharedPreferencs只適用與保存鍵值對類型的數(shù)據(jù)。當(dāng)需要保存的數(shù)據(jù)量較大,且結(jié)構(gòu)復(fù)雜的關(guān)系型數(shù)據(jù)則需要使用數(shù)據(jù)庫,在Android中存儲數(shù)據(jù)的主要方法就是使用SQLite數(shù)據(jù)庫。6.3.1SQLite簡介

SQLite是Android中內(nèi)置的數(shù)據(jù)庫,為Android提供一個輕量級的關(guān)系型數(shù)據(jù)庫。Android原生支持SQLite,為此提供了如下的3個類。SQLiteOpenHelper:負(fù)責(zé)數(shù)據(jù)庫的創(chuàng)建和升級。SQLiteDatabase:負(fù)責(zé)接入數(shù)據(jù)庫,實現(xiàn)對數(shù)據(jù)的增刪改查操作。Cursor:負(fù)責(zé)讀寫數(shù)據(jù)庫。6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除

Android提供了基于SQLiteDatabse的SQLiteOpenHelper幫助類,用來管理數(shù)據(jù)庫的創(chuàng)建和版本更新。1.SQLiteOpenHelper簡介SQLiteOpenHelper管理數(shù)據(jù)庫體現(xiàn)在以下三個方面: 1)新建數(shù)據(jù):第一次安裝App時,數(shù)據(jù)庫文件不存在,助手會創(chuàng)建數(shù)據(jù)庫文件并建立表。2)便于訪問數(shù)據(jù)庫:SQLiteOpenHelper可以返回一個易于使用的數(shù)據(jù)庫對象,程序通過它訪

問數(shù)據(jù)庫,而非直接讀取數(shù)據(jù)庫文件。

3)數(shù)據(jù)庫格式升級維護(hù):當(dāng)數(shù)據(jù)庫的表結(jié)構(gòu)或表的數(shù)據(jù)發(fā)生變

化時,助手可在App升級時,

安全的轉(zhuǎn)換數(shù)據(jù)庫結(jié)構(gòu)。SQLiteOpenHelper類提供了兩個重要的方法,分別是onCreate()和onUpgrade()。onCreate()方法在初次生成數(shù)據(jù)庫時才會被調(diào)用,因此可以在onCreate()方法里添加生成數(shù)據(jù)庫

表結(jié)構(gòu)及一些應(yīng)用使用到的初始化數(shù)據(jù)。onUpgrade()方法在數(shù)據(jù)庫的版本發(fā)生變化時會被調(diào)

用,一般在軟件升級時才需改變版本號。6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除2.新建SQLiteOpenHelper子類數(shù)據(jù)庫創(chuàng)建的流程

使用SQLiteOpenHelper創(chuàng)建數(shù)據(jù)庫通常的步驟是:

子類繼承自SQLiteOpenHelper; SQLiteOpenHelper的子類必須提供構(gòu)造方法;

數(shù)據(jù)庫第一次被訪問時新建,需要指定文件名和版本號;

子類必須覆蓋SQLiteOpenHelper類的兩個抽象方法:onCreate()和onUpgrade(); onCreate()在數(shù)據(jù)庫被新建時調(diào)用; onUpgrade()在數(shù)據(jù)庫升級時被調(diào)用;6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除

3.SQLiteOpenHelper類的常用方法SQLiteOpenHelper提供的主要方法如表所示。方法作用abstractvoidonCreate(SQLiteDatabasedb)創(chuàng)建數(shù)據(jù)庫abstractvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)升級數(shù)據(jù)庫publicvoidonDowngrade(SQLiteDatabasedb,intoldVersion,intnewVersion)降級數(shù)據(jù)庫SQLiteDatabasegetReadableDatabase()以只讀方式打開數(shù)據(jù)庫SQLiteDatabasegetWritableDatabase()以讀寫方式打開數(shù)據(jù)庫publicvoidclose()關(guān)閉所有打開的SQLiteDatabase對象6.3.2數(shù)據(jù)庫的創(chuàng)建和刪除6.3.3數(shù)據(jù)庫中表的操作1.SQLiteDatabase類簡介SQLiteDatabase代表一個數(shù)據(jù)庫,對應(yīng)了一個數(shù)據(jù)庫文件。數(shù)據(jù)庫使用表table存儲數(shù)據(jù)。SQLite支持的數(shù)據(jù)類型有五種,如表所示。數(shù)據(jù)類型說明INTEGER整數(shù)型VARCHAR字符型REAL浮點型NUMBERIC布爾型、日期型或日期時間型BLOB二進(jìn)制大數(shù)據(jù)2.創(chuàng)建表和刪除表1)新建表新建表可以通過SQLiteDatabase.execSQL()方法執(zhí)行SQL語句完成。Android在新建數(shù)據(jù)庫的時候會自動回調(diào)SQLiteOpenHelper的onCreate()方法。Android將SQLiteDatabase對象作為參數(shù)傳入onCreate(),因此在onCreate()中可以調(diào)用SQLiteDatabase.execSQL()方法完成表的創(chuàng)建。6.3.3數(shù)據(jù)庫中表的操作2.創(chuàng)建表和刪除表2)刪除表刪除表的操作是通過調(diào)用SQLiteDatabase類提供的execSQL()方法,執(zhí)行刪除表的SQL語句實現(xiàn)。例如,執(zhí)行下面的語句就可以刪除SQLiteDatabase類型對象db中的stu_info表。Stringsql=“droptablestu_info”;db.execSQL(sql);6.3.3數(shù)據(jù)庫中表的操作3.數(shù)據(jù)操作1)添加數(shù)據(jù)添加數(shù)據(jù)可以使用SQLiteDatabase的insert()方法和execSQL()方法,使用execSQL()在方法中提供SQL命令的字符串參數(shù)。2)修改數(shù)據(jù)與添加數(shù)據(jù)類似,修改數(shù)據(jù)的方法可以使用SQLiteDatabase的update()方法和execSQL()方法。6.3.3數(shù)據(jù)庫中表的操作3.數(shù)據(jù)操作3)刪除數(shù)據(jù)刪除數(shù)據(jù)的方法可以使用SQLiteDatabase的delete()方法和execSQL()方法。4)查詢數(shù)據(jù)SQLiteDatabase提供的數(shù)據(jù)查詢方法query()有三個,Cursor返回查詢的結(jié)果集。6.3.3數(shù)據(jù)庫中表的操作

4.SimpleCursorAdapter簡單游標(biāo)適配器數(shù)據(jù)庫中的數(shù)據(jù)使用ListView顯示,只需要將CursorAdapter適配器綁定到ListView,為ListView提供數(shù)據(jù)源即可。CursorAdapter連接數(shù)據(jù)庫與ListView的關(guān)系如圖所示。6.3.3數(shù)據(jù)庫中表的操作6.4本章總結(jié)

本章介紹了Android應(yīng)用程序的三種存儲模式,分別為文件存儲、SharedPreferences存儲和SQLite數(shù)據(jù)庫存儲。文件存儲中主要介紹了IO流操作文件的常用方法并舉例說明。SharedPreferences存儲主要介紹了SharedPreferences接口、操作步驟并舉例說明。SQLite數(shù)據(jù)庫存儲中主要介紹了數(shù)據(jù)庫的創(chuàng)建和刪除操作、對表的操作并舉例說明。通過本章的學(xué)習(xí),有助于學(xué)習(xí)者按需設(shè)計Android應(yīng)用程序存儲模式。第7章Intent與BroadcastReceiverAndroid應(yīng)用程序開發(fā)技術(shù)內(nèi)容安排7.1Intent7.2BroadcastReceiver內(nèi)容安排7.1Intent7.2BroadcastReceiver7.1IntentIntent主要是解決Android應(yīng)用的各組件之間的通訊。Intent負(fù)責(zé)對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述。Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將Intent傳遞給被調(diào)用的組件,并完成組件的調(diào)用。

7.1.1Intent原理Intent原理:Intent負(fù)責(zé)對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent主要有以下幾種重要用途:1.啟動Activity2.啟動Service3.發(fā)送廣播7.1.2Intent分類Intent分類:Intent可以分為兩組,分別為顯式Intent和隱式Intent。顯式Intent:通過名字指定目標(biāo)組件。顯式Intent通常用于應(yīng)用程序內(nèi)部消息,如一個活動啟動從屬的服務(wù)或啟動一個姐妹活動。下面給出一段代碼,通過顯式調(diào)用打開一個網(wǎng)頁,具體代碼如下:7.1.2Intent分類

隱式Intent:并不指定目標(biāo)的名字(組件名字字段為空)。隱式Intent通常用于激活其他應(yīng)用程序中的組件。創(chuàng)建一個拍照程序,下面給出一段具體代碼:7.1.3Intent屬性Intent對象主要有六個屬性,分別是ComponentName(組件名稱)、Action(動作)、Category(類別)、Data(數(shù)據(jù))、Extras(額外)、Flags(標(biāo)記)。1.ComponentName(組件名稱)ComponentName是指要處理這個Intent的組件的名字。組件名字是可選的,如果被設(shè)置了,這個Intent對象將被傳遞到指定的類。7.1.3Intent屬性2.動作(Action)規(guī)定了Intent要完成的動作,是一個字符串常量。使用setAction()來設(shè)置Action屬性,使用getAction()來獲得Action屬性。既可以使用系統(tǒng)內(nèi)置的Action,也可以自己定義。系統(tǒng)自定義的Action,如ACTION_VIEW,ACTION_EDIT,ACTION_MAIN等等。

3.數(shù)據(jù)(Data)

數(shù)據(jù)(data)作用于Intent上的數(shù)據(jù)URI和數(shù)據(jù)MIME類型,不同的動作有不同的數(shù)據(jù)規(guī)格。例如:如果動作字段是ACTION_EDIT,數(shù)據(jù)字段應(yīng)該包含將顯示用于編輯的文檔的URI;如果動作是ACTION_CALL,數(shù)據(jù)字段應(yīng)該是一個含呼叫電話號碼的URI;如果動作是ACTION_VIEW,數(shù)據(jù)字段應(yīng)該是根據(jù)用戶需求設(shè)置數(shù)據(jù)類型打開相應(yīng)的Activity。7.1.3Intent屬性

4.種類(Category)通過Action,配合Data或Type屬性可以準(zhǔn)確的表達(dá)出一個完整的意圖了。但為了使的”意圖”更加精確,給意圖添加一些約束,這個約束由“意圖”的Catagory屬性實現(xiàn)。一個意圖只能指定一個action屬性,但是可以添加一個或多個Catagory屬性。Category屬性可以自定義字符串實現(xiàn),但為了方便不同應(yīng)用之間的通信還可以設(shè)置系統(tǒng)預(yù)定義的Category常量。7.1.3Intent屬性5.附加信息(Extras)Extras用于向Intent組件添加附加信息,采用鍵值對的形式保存附加信息。例如,一個ACTION_TIMEZ0NE_C-HANGE動作有一個“time-zone”的附加信息,標(biāo)識新的時區(qū);ACTIONHEADSETPLUG動作有一個“state”附加信息,標(biāo)識頭部是否塞滿或未塞滿,有一個“name”附加信息,標(biāo)識頭部的類型。Intent對象中有系列的put...()方法用于插入各種附加數(shù)據(jù),一系列的get...()方法用于讀取數(shù)據(jù),這些方法與Bundle對象的方法類似。7.1.3Intent屬性【例7-2】創(chuàng)建Android項目,主要使用putExtras()方法和getExtras()方法實現(xiàn)為Intent添加附加信息和讀取附加信息的功能。創(chuàng)建一個工程名為samp7_2的項目,包名為xsyu.jsj.samp7_2的空白工程。

在布局文件main.xm1中添加一個Button組件btn,并設(shè)置其文本為“跳轉(zhuǎn)”。7.1.4使用Intent啟動Activity實例代碼如下:

在res/layout目錄下創(chuàng)建個link.xml文件,用來作為Activity的布局文件,在該布局文件中添加一個TextView組件代碼如下:7.1.4使用Intent啟動Activity實例

打開MainActivity.java文件,定義一個int類型常量,用來作為請求標(biāo)識,代碼如下:privatefinalstaticintREQUESTCODE=1;//聲明請求標(biāo)識7.1.4使用Intent啟動Activity實例

在MainActivity.java文件的OnCreate()方法中,獲取布局文件中的Button按鈕,并為其設(shè)置單擊監(jiān)聽事件,代碼如下:7.1.4使用Intent啟動Activity實例在該方法中,首先創(chuàng)建一個Intent對象,并設(shè)置要打開的Activity,然后使用Intent對象putExtra()方法設(shè)置附加信息,最后使用startActivityFarResult()方法啟動Activity。主要代碼如下:7.1.4使用Intent啟動Activity實例打開AcceptdataActivity.java文件,在OnCreate()方法中,使用Intent對象的getExtras()方法獲取附加信息,并顯示到TextView組件中。OnCreate()方法代碼如下:7.1.4使用Intent啟動Activity實例內(nèi)容安排7.1Intent7.2BroadcastReceiver7.2BroadcastReceiverBroadcastReceiver,即廣播接收器,是一個轉(zhuǎn)租與接收廣播通知信息并做出對應(yīng)處理的組件。很多廣播源自于系統(tǒng)代碼,比如,同時時區(qū)改變、電池電量低、拍攝一張照片或用戶改變語言選項。應(yīng)用程序也可以進(jìn)行廣播,比如通知其他應(yīng)用程序下載一些數(shù)據(jù)完成并處于可用狀態(tài)。Android中的廣播時間有兩種,一種就是系統(tǒng)廣播事件,另一種是自定義廣播事件。7.2.1廣播機(jī)制及BroadcastReceiver原理在Android里面有各種各樣的廣播,比如電池的使用狀態(tài),電話的接收和短信的接收都會產(chǎn)生一個廣播,應(yīng)用程序開發(fā)者也可以監(jiān)聽這些廣播并做出程序邏輯的處理。廣播作為Androi

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論