![軟件開發(fā)工具:第6章 Android網(wǎng)絡(luò)應(yīng)用_第1頁(yè)](http://file4.renrendoc.com/view/93e2c5c3b9c77dc40006b257a706ec05/93e2c5c3b9c77dc40006b257a706ec051.gif)
![軟件開發(fā)工具:第6章 Android網(wǎng)絡(luò)應(yīng)用_第2頁(yè)](http://file4.renrendoc.com/view/93e2c5c3b9c77dc40006b257a706ec05/93e2c5c3b9c77dc40006b257a706ec052.gif)
![軟件開發(fā)工具:第6章 Android網(wǎng)絡(luò)應(yīng)用_第3頁(yè)](http://file4.renrendoc.com/view/93e2c5c3b9c77dc40006b257a706ec05/93e2c5c3b9c77dc40006b257a706ec053.gif)
![軟件開發(fā)工具:第6章 Android網(wǎng)絡(luò)應(yīng)用_第4頁(yè)](http://file4.renrendoc.com/view/93e2c5c3b9c77dc40006b257a706ec05/93e2c5c3b9c77dc40006b257a706ec054.gif)
![軟件開發(fā)工具:第6章 Android網(wǎng)絡(luò)應(yīng)用_第5頁(yè)](http://file4.renrendoc.com/view/93e2c5c3b9c77dc40006b257a706ec05/93e2c5c3b9c77dc40006b257a706ec055.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、鄭州大學(xué)信息工程學(xué)院第六章 Android網(wǎng)絡(luò)應(yīng)用點(diǎn)擊添加文本鄭州大學(xué)信息工程學(xué)院6.1 Http通信6.2 Socket通信6.3 使用WebView顯示網(wǎng)頁(yè)6.4 項(xiàng)目實(shí)戰(zhàn):查詢員工信息6.5 本章小結(jié)6.1 HTTP通信1Http協(xié)議簡(jiǎn)介2Http請(qǐng)求方式3HttpURLConnection接口4HttpClient接口Http協(xié)議簡(jiǎn)介Http(Hypertext Transfer Protocol),是Web互連網(wǎng)的基礎(chǔ),它是建立在TCP協(xié)議之上的一種客戶端/服務(wù)器端協(xié)議。Http連接的工作過(guò)程是客戶端發(fā)送的Http請(qǐng)求,等待服務(wù)器接收請(qǐng)求回送響應(yīng),客戶端解析、處理返回的信息。Http
2、連接是一種“短連接”、“無(wú)狀態(tài)”??蛻舳讼蚍?wù)器請(qǐng)求服務(wù)時(shí),須聲明請(qǐng)求相應(yīng)的行為。請(qǐng)求方法常用的有Get、Post兩種。Http請(qǐng)求方式-Get方式Get方式是將傳遞的參數(shù)以某種數(shù)據(jù)串的方式顯示的追加到提交的URL后面,傳遞的數(shù)值封裝在傳值變量中,通過(guò)傳值變量來(lái)獲取傳遞的值。傳值數(shù)據(jù)串與URL地址之間以?號(hào)間隔,數(shù)據(jù)串傳遞參數(shù)的形式是name=value,name為傳值變量,value為傳遞的值。如:GET/signup/signup.php?inviteCode=2388493434Get方式傳遞參數(shù)數(shù)據(jù)量較小,安全性非常低。Http請(qǐng)求方式-Post方式Post請(qǐng)求可以向服務(wù)器傳送數(shù)據(jù),而
3、且數(shù)據(jù)放在HTML HEADER內(nèi)一起傳送到服務(wù)端URL地址,數(shù)據(jù)對(duì)用戶不可見(jiàn)。Post傳輸方式不在URL里傳遞,也正好解決了get傳輸量小、容易篡改及不安全等一系列不足。HttpURLConnection接口HttpURLConnection接口是繼承于URLConnection類,二者都是抽象類,通過(guò)URL的openConnection()方法獲得HttpURLConnection對(duì)象。 代碼如下所示: URL url = new URL(URL地址); HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();Ht
4、tpURLConnection接口HttpURLConnection在URLConnection的基礎(chǔ)上發(fā)送Http請(qǐng)求獲取資源常用方法:void setDoInput():設(shè)置URLConnection的doInput字段的值,值為true或者false。如果使用URL連接進(jìn)行輸入,設(shè)為true,反之,則設(shè)為false。void setDoOutput():設(shè)置URLConnection的doOutput字段的值,值為true或者false。如果使用URL連接進(jìn)行輸出,設(shè)為true,反之,則設(shè)為false。InputStream getInputStream():獲取URL連接的輸入流,從而
5、獲取響應(yīng)的內(nèi)容。OutputStream getOutputStream():獲取URL連接的輸出流,從而傳遞參數(shù)給服務(wù)器。HttpURLConnection接口void setUseCaches():設(shè)置URL連接的useCaches字段。void setInstanceFollowRedirects():設(shè)置是否應(yīng)該自動(dòng)執(zhí)行 http 重定向。void setRequestProperty(String key,String value):設(shè)置一般請(qǐng)求屬性。int getResponseCode():獲取服務(wù)器的響應(yīng)代碼。String getResponseMessage():獲取服務(wù)器的
6、響應(yīng)信息。String getResquestMessage():獲取發(fā)送請(qǐng)求的方法。void setRequestMethod():設(shè)置請(qǐng)求方式。HttpURLConnection接口HttpURLConnection請(qǐng)求獲取URL引用的資源步驟(1)創(chuàng)建HttpURLConnection對(duì)象;(2)設(shè)置請(qǐng)求的屬性和對(duì)象參數(shù);(3)如果是Get方式請(qǐng)求,由于HttpURLConnection默認(rèn)使用Get方式,因此直接調(diào)用connect()方法即可建立連接;如果是以Post方式請(qǐng)求,則需要設(shè)置請(qǐng)求方式為Post。注:涉及到訪問(wèn)網(wǎng)絡(luò)時(shí),需要在項(xiàng)目的配置文件AndroidManifest.xml
7、文件中須添加訪問(wèn)網(wǎng)絡(luò)的權(quán)限HttpClient接口使用HttpClient發(fā)送請(qǐng)求、接收響應(yīng)步驟:(1)創(chuàng)建HttpClient對(duì)象。(2)創(chuàng)建請(qǐng)求方法的實(shí)例,并指定請(qǐng)求URL。 如果需要發(fā)送GET請(qǐng)求,創(chuàng)建HttpGet對(duì)象; 如果需要發(fā)送POST請(qǐng)求,創(chuàng)建HttpPost對(duì)象。(3)設(shè)置參數(shù)。調(diào)用setParams(HetpParams params)方法來(lái)添加請(qǐng)求參數(shù);HttpPost對(duì)象可調(diào)用setEntity(HttpEntity entity)方法來(lái)設(shè)置參數(shù)。(4)發(fā)送請(qǐng)求獲取響應(yīng)。HttpResponse httpResponse=client.execute(http);/發(fā)送
8、請(qǐng)求,返回Http響應(yīng)HttpClient接口(5)獲取信息。調(diào)用HttpResponse相應(yīng)的方法可獲取服務(wù)器返回的信息;調(diào)用HttpResponse的getEntity()方法可獲取HttpEntity對(duì)象;調(diào)用EntityUtils.toString()方法獲取封裝在HttpEntity對(duì)象中的服務(wù)器的響應(yīng)內(nèi)容。(6)釋放連接。Get方法;Post方法(使用NameValuePair來(lái)保存要傳遞的參數(shù),并設(shè)置所使用的字符集)。Android 6.0拋棄HttpClientAndroid6.0 SDK中刪除HttpClient的相關(guān)類設(shè)置android SDK的編譯版本為23時(shí),且使用了h
9、ttpClient相關(guān)類的庫(kù)項(xiàng)目:如android-async-http等等,會(huì)出現(xiàn)有一些類找不到的錯(cuò)誤。解決辦法:修改gradle構(gòu)建文件useLibrary org.apache.http.legacy6.2 Socket通信1Socket簡(jiǎn)介2使用基于TCP協(xié)議的Socket進(jìn)行通信3使用基于UDP的Socket通信Socket簡(jiǎn)介Socket是一種抽象層,通信兩端通過(guò)它來(lái)發(fā)送和接收數(shù)據(jù)。Socket提供了應(yīng)用程序與外界通信的端口并為通信雙方的提供了數(shù)據(jù)傳輸通道。Socket的主要特點(diǎn):數(shù)據(jù)丟失率低,使用簡(jiǎn)單且易于移植。Socket有兩種傳輸模式:面向連接和無(wú)連接。不講,其他課程已講過(guò)S
10、ocket的兩種傳輸模式的區(qū)別面向連接模式使用TCP協(xié)議,在通信兩端建立通信鏈路,依次發(fā)送和接收數(shù)據(jù)。無(wú)連接模式使用UDP協(xié)議,將數(shù)據(jù)進(jìn)行打包發(fā)送。無(wú)連接模式接收端接收數(shù)據(jù)包的順序與發(fā)送端發(fā)送的順序是不一樣的,而且數(shù)據(jù)安全性欠佳。使用基于TCP協(xié)議的Socket進(jìn)行通信1、TCP簡(jiǎn)介TCP(Transmission Control Protocol,傳輸控制協(xié)議),是一種面向連接的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,TCP完成第四層傳輸層所指定的功能。應(yīng)用層向傳輸層層發(fā)送用于網(wǎng)絡(luò)間傳輸?shù)臄?shù)據(jù)流,然后TCP把數(shù)據(jù)流分割成適當(dāng)長(zhǎng)度
11、的報(bào)文段,之后TCP把結(jié)果包傳給IP層,由它來(lái)通過(guò)網(wǎng)絡(luò)將包傳送給接收端實(shí)體的TCP層。使用基于TCP協(xié)議的Socket進(jìn)行通信2、基于TCP的Socket通信步驟(1)創(chuàng)建TCP服務(wù)器端。ServerSocket(int port):指定端口號(hào)(port)來(lái)創(chuàng)建ServerSocket對(duì)象。ServerSocket(int port,in backlog):增加改變連接隊(duì)列的參數(shù)backlog。ServerSocket(int port,int backlog,InetAddress localAddr):增加IP地址參數(shù)localAddr,用來(lái)指定將ServerSocket綁定到指定的IP地
12、址。(2)等待客戶端請(qǐng)求。一個(gè)服務(wù)器應(yīng)該可以循環(huán)調(diào)用accept()方法不斷接收客戶端請(qǐng)求使用基于TCP協(xié)議的Socket進(jìn)行通信(3)服務(wù)器端接收請(qǐng)求,返回響應(yīng)。accept()方法在沒(méi)有數(shù)據(jù)進(jìn)行接收的處于堵塞狀態(tài)。接收數(shù)據(jù)時(shí),可以通過(guò)InputStream讀取接收的數(shù)據(jù),OutputStream返回響應(yīng)數(shù)據(jù)。(4)客戶端發(fā)送請(qǐng)求,獲取返回信息。服務(wù)器端創(chuàng)建ServerSocket對(duì)象等待客戶端請(qǐng)求;客戶端創(chuàng)建一個(gè)指定服務(wù)器端IP地址和端口號(hào)的Socket對(duì)象,通過(guò)InputStream讀取數(shù)據(jù)、OutputStream寫入數(shù)據(jù)。使用基于UDP的Socket通信1、UDP簡(jiǎn)介UDP(User
13、 Datagram Protocol,用戶數(shù)據(jù)包協(xié)議),是簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。UDP的缺點(diǎn)是不提供數(shù)據(jù)報(bào)分組、組裝和不能對(duì)數(shù)據(jù)包排序UDP的優(yōu)點(diǎn)是在傳輸數(shù)據(jù)包前不用在客戶端和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制,因此傳輸速度很快。使用DatagramSocket創(chuàng)建UDP服務(wù)器端步驟(1)創(chuàng)建DatagramSocket對(duì)象。DatagramSocket():創(chuàng)建DatagramSocket實(shí)例,并將該對(duì)象綁定到本機(jī)默認(rèn)IP地址、本機(jī)所有可用端口中隨機(jī)選擇的某個(gè)端口。DatagramSocket(int prot):
14、創(chuàng)建DatagramSocket實(shí)例,并將該對(duì)象綁定到本機(jī)默認(rèn)IP地址、指定端口。DatagramSocket(int port, InetAddress laddr):創(chuàng)建DatagramSocket實(shí)例,并將該對(duì)象綁定到指定IP地址、指定端口。(2)創(chuàng)建DatagramPacket對(duì)象。(3)接收數(shù)據(jù)。getData()方法獲取數(shù)據(jù)緩沖區(qū);getOffset()方法獲取數(shù)據(jù)起始位置;getLength()方法獲取數(shù)據(jù)長(zhǎng)度。使用DatagramSocket創(chuàng)建UDP客戶端步驟(1)客戶端創(chuàng)建指定監(jiān)聽端口的DatagramSocket對(duì)象。DatagramSocket socket = new
15、 DatagramSocket(10000);/需指定端口號(hào)(2)創(chuàng)建InetAddress對(duì)象。InetAddress serverAddress = InetAddress.getByName(“192.168.101”);/將IP地址字符串轉(zhuǎn)化為要發(fā)送請(qǐng)求的網(wǎng)絡(luò)地址(3)創(chuàng)建DatagramPacket對(duì)象。DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress , 10000); /4個(gè)參數(shù)分別是數(shù)據(jù)包、數(shù)據(jù)包長(zhǎng)度、要發(fā)送的地址以及端口號(hào)(4)發(fā)送數(shù)據(jù)。socket.send(packet)
16、; /調(diào)用send()方法發(fā)送數(shù)據(jù)Http與Socket通信區(qū)別Http連接使用的是“請(qǐng)求響應(yīng)方式”,即在請(qǐng)求時(shí)建立連接通道,當(dāng)客戶端向服務(wù)器發(fā)送請(qǐng)求后,服務(wù)器端才能向客戶端返回?cái)?shù)據(jù)。Socket通信則是在雙方建立起連接后就可以直接進(jìn)行數(shù)據(jù)的傳輸,在連接時(shí)可實(shí)現(xiàn)信息的主動(dòng)推送,而不需要每次由客戶端向服務(wù)器發(fā)送請(qǐng)求。Android網(wǎng)絡(luò)開發(fā)注意事項(xiàng)編寫本章的網(wǎng)絡(luò)程序時(shí),網(wǎng)絡(luò)任務(wù)不能放在主線程中執(zhí)行,否則會(huì)報(bào)異?!癮ndroid.os.NetworkOnMainThreadException”需要使用線程編程技術(shù)解決該異常,或者使用安卓的AsyncTask類GUI的線程同步(AsyncTask)An
17、droid AsyncTaskAndroid的AsyncTask是一個(gè)輕量級(jí)異步處理類。public abstract class AsyncTask AsyncTask定義了三種泛型類型 Params,Progress和Result。Params 啟動(dòng)任務(wù)執(zhí)行的輸入?yún)?shù),比如HTTP請(qǐng)求的URL。Progress 后臺(tái)任務(wù)執(zhí)行的百分比。Result 后臺(tái)執(zhí)行任務(wù)最終返回的結(jié)果,比如String。在特定場(chǎng)合下,并不是所有類型都被使用,如果沒(méi)有被使用,可以用java.lang.Void類型代替。Android AsyncTask一個(gè)異步任務(wù)的執(zhí)行一般包括以下幾個(gè)步驟:1.execute(Para
18、ms. params),執(zhí)行一個(gè)異步任務(wù)。2.onPreExecute(),在execute(Params. params)被調(diào)用后立即執(zhí)行,一般用來(lái)在執(zhí)行后臺(tái)任務(wù)前對(duì)UI做一些標(biāo)記。3.doInBackground(Params. params),在onPreExecute()完成后立即執(zhí)行,用于執(zhí)行較為費(fèi)時(shí)的操作,此方法將接收輸入?yún)?shù)和返回計(jì)算結(jié)果。4.onProgressUpdate(Progress. values),在調(diào)用publish Progress (Progress. values) 時(shí),此方法被執(zhí)行,直接將進(jìn)度信息更新到UI組件上。5.onPostExecute(Resul
19、t result),當(dāng)后臺(tái)操作結(jié)束時(shí),此方法將會(huì)被調(diào)用,直接將計(jì)算結(jié)果顯示到UI組件上。Android AsyncTask在使用的時(shí)候,有幾點(diǎn)需要格外注意:1.異步任務(wù)的實(shí)例必須在UI線程中創(chuàng)建。2.execute(Params. params)方法必須在UI線程中調(diào)用。3.不要手動(dòng)調(diào)用onPreExecute(),doInBackground(Params. params),onProgressUpdate(Progress. values),onPostExecute(Result result)這幾個(gè)方法。4.不能在doInBackground(Params. params)中更改UI組
20、件的信息。5.一個(gè)任務(wù)實(shí)例只能執(zhí)行一次,如果執(zhí)行第二次將會(huì)拋出異常。6.3 使用WebView顯示網(wǎng)頁(yè)1、WebView簡(jiǎn)介2、WebView加載網(wǎng)頁(yè)3、WebView加載HTML代碼4、WebView中使用JavaScriptWebView簡(jiǎn)介WebView是一個(gè)常用的控件,是內(nèi)置的瀏覽器控件,我們可以用它來(lái)瀏覽網(wǎng)頁(yè)、打開文檔等。WebView控件本身就是一個(gè)瀏覽器實(shí)現(xiàn),它的內(nèi)核基于開源的WebKit引擎。如:注:要使用WebView控件訪問(wèn)HTML頁(yè)面,需要添加訪問(wèn)網(wǎng)絡(luò)的權(quán)限,代碼如下: WebView加載網(wǎng)頁(yè)通過(guò)WebView可以相當(dāng)于瀏覽器加載Web頁(yè)面,并對(duì)頁(yè)面實(shí)現(xiàn)前進(jìn)后退等操作。調(diào)
21、用loadUrl(String url)方法加載url對(duì)應(yīng)的網(wǎng)頁(yè)。如:WebView web = (WebView) findViewById(R.id.webView); web.loadUrl();WebView可以加載本地文件,此時(shí)的URL是文件路徑,本地文件存放在assets文件中。如“file:/android_asset/XX.html”。WebView控件提供了大量的方法,例如,goback()后退,goForward()前進(jìn)等。WebView加載HTML代碼WebView提供一個(gè)loadDataWithBaseURL()方法可以直接載入HTML字符串,并對(duì)該字符串進(jìn)行HTML解
22、析。loadDataWithBaseURL()的前3個(gè)參數(shù)分別是加載的HTML字符串、HTML代碼的MIME類型以及HTML代碼編碼所用的字符集,其余兩個(gè)可以指定該頁(yè)面的baseUrl。如:void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)WebView中使用JavaScriptWebView提供了一個(gè)WebSettings管理工具類,該工具用來(lái)管理WebView選項(xiàng)設(shè)置狀態(tài)。通過(guò)getSettings()方法獲得WebView設(shè)置的
23、管理對(duì)象WebSettings,從而調(diào)用setJavaScriptEnabled()方法允許WebView加載的網(wǎng)頁(yè)使用JavaScript。調(diào)用addJavascriptInterface(Object object, String name)實(shí)現(xiàn)將Java對(duì)象暴露給JavaScript,其中object為Java對(duì)象的實(shí)例,name為用戶自定義的名字。WebView中使用JavaScript實(shí)現(xiàn)WebView中的JavaScript與Android應(yīng)用程序交互步驟:(1)創(chuàng)建WebSettings工具類對(duì)象。(2)調(diào)用setJavaScriptEnabled()方法開啟JavaScript使用(3)調(diào)用addJavascriptInterface()方法,創(chuàng)建一個(gè)能訪問(wèn)Java方法接口。6.4項(xiàng)目實(shí)戰(zhàn):查詢員工信息任務(wù)說(shuō)明:在用戶界面中輸入要查詢的員工編號(hào),點(diǎn)擊查詢按鈕,向服務(wù)器發(fā)送Post請(qǐng)求,并將服務(wù)器返回的查詢結(jié)果顯示在界面中??蚣苤v解Employee
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025伸縮縫安裝工程勞務(wù)分包合同修改
- 9 知法守法依法維權(quán) 第二課時(shí)(說(shuō)課稿)-2023-2024學(xué)年道德與法治六年級(jí)上冊(cè)統(tǒng)編版001
- 2023二年級(jí)數(shù)學(xué)上冊(cè) 六 表內(nèi)乘法和表內(nèi)除法(二)練習(xí)十四說(shuō)課稿 蘇教版001
- 10《爬山虎的腳》第二課時(shí) 說(shuō)課稿-2024-2025學(xué)年語(yǔ)文四年級(jí)上冊(cè)統(tǒng)編版
- Unit 3 My weekend plan Part 6(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)六年級(jí)上冊(cè)
- 生了病怎么辦 (課件)-2024-2025學(xué)年人教版(2024)體育一年級(jí)全一冊(cè)
- Review Module Unit 1(說(shuō)課稿)-2023-2024學(xué)年外研版(三起)英語(yǔ)四年級(jí)下冊(cè)
- 17《松鼠》說(shuō)課稿-2024-2025學(xué)年五年級(jí)語(yǔ)文上冊(cè)統(tǒng)編版001
- 2025農(nóng)村宅基地轉(zhuǎn)讓合同模板
- 8網(wǎng)絡(luò)新世界 第一課時(shí) 說(shuō)課稿-2023-2024學(xué)年道德與法治四年級(jí)上冊(cè)統(tǒng)編版
- 北京市豐臺(tái)區(qū)市級(jí)名校2024屆數(shù)學(xué)高一第二學(xué)期期末檢測(cè)模擬試題含解析
- 設(shè)立項(xiàng)目管理公司組建方案
- 薪酬戰(zhàn)略與實(shí)踐
- 答案之書(解答之書)-電子版精選答案
- 中國(guó)古代文學(xué)史 馬工程課件(上)01總緒論
- GB/T 22085.1-2008電子束及激光焊接接頭缺欠質(zhì)量分級(jí)指南第1部分:鋼
- 上海中心大廈-介紹 課件
- 《口腔修復(fù)學(xué)》種植義齒-課件
- 非酒精性脂肪性肝病防治指南解讀課件
- 地理微格教學(xué)課件
- 合成氨操作規(guī)程
評(píng)論
0/150
提交評(píng)論