




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android高效率編碼-第三方SDK詳解系列(二)Bmob后端云開(kāi)發(fā),實(shí)現(xiàn)登錄注冊(cè),更改資料,修改密碼,郵箱驗(yàn)證,上傳,下載,推送消息,縮略圖加載等功能我的的本意是第二篇寫(xiě)Mob的shareSDK分享組件的,奈何需要去注冊(cè)各平臺(tái)的賬號(hào),還要審核,有些審核還挺久,就沒(méi)辦法,改為寫(xiě)這個(gè)Bmob了,相信大家對(duì)Bmob都是挺期待的吧,因?yàn)樗鳛锳ndroid后端的實(shí)現(xiàn)很好的支持,國(guó)內(nèi)很多軟件都在使用它,他的功能也是特別神奇,這里就不一一細(xì)說(shuō)了,我們用實(shí)際的例子來(lái)見(jiàn)證他的神奇這里我簡(jiǎn)單的介紹一下Bmob吧,Bmob平臺(tái)為您的移動(dòng)應(yīng)用提供了一個(gè)完整的后端解決方案,他們提供輕量級(jí)的SDK開(kāi)發(fā)包,讓開(kāi)發(fā)者以
2、最小的配置和最簡(jiǎn)單的方式使用Bmob平臺(tái)提供的服務(wù),進(jìn)而完全消除開(kāi)發(fā)者編寫(xiě)服務(wù)器代碼以及維護(hù)服務(wù)器的操作。目錄:好了,我們得到了我們想要的key了,我們就可以開(kāi)始編寫(xiě)了一.Hello Bmob1.下載SDK,添加進(jìn)工程這個(gè)相信都不用多說(shuō)了Android Studio鑒于目前Google官方推薦使用 Android Studio 進(jìn)行Android項(xiàng)目開(kāi)發(fā),自 V3.4.2 開(kāi)始,Bmob Android SDK 可以使用Gradle來(lái)進(jìn)行包依賴(lài)管理,如果你使用Android Studio來(lái)進(jìn)行基于BmobSDK的項(xiàng)目開(kāi)發(fā)1.在Project的build.gradle文件中添加如下配置(注意文字
3、說(shuō)明部分)buildscript repositories jcenter() dependencies classpath 'com.android.tools.build:gradle:1.2.3' allprojects repositories jcenter() /Bmob的maven倉(cāng)庫(kù)地址,必須填寫(xiě) maven url " 2、在app的build.gradle文件中添加如下配置(注意文字說(shuō)明部分):apply plugin: 'com.android.application'android compileSdkVersion 22 bu
4、ildToolsVersion '22.0.1' defaultConfig applicationId "cn.bmob.android" minSdkVersion 14 targetSdkVersion 22 versionCode 1 versionName "1.0" buildTypes release minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), '
5、' lintOptions abortOnError false dependencies compile fileTree(dir: 'libs', include: '*.jar') compile 'com.android.support:appcompat-v7:22.2.0' /以下SDK開(kāi)發(fā)者請(qǐng)根據(jù)需要自行選擇 /bmob-sdk :Bmob的android sdk包 compile 'cn.bmob.android:bmob-sdk:3.4.5' /bmob-push:Bmob的推送包 compile
6、9;cn.bmob.android:bmob-push:0.6' /bmob-im:bmob的im包,以下兩個(gè)配置是im功能所需 compile 'cn.bmob.android:bmob-im:1.1.9' compile 'cn.bmob.android:bmob-sdk:3.4.3' /okhttp(選填):為解決弱網(wǎng)情況下SDK請(qǐng)求失敗及響應(yīng)慢的問(wèn)題,自V3.4.3版本開(kāi)始使用okhttp優(yōu)化SDK的網(wǎng)絡(luò)框架。 compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.
7、squareup.okio:okio:1.4.0' /bmob-sms :Bmob單獨(dú)為短信服務(wù)提供的包 compile 'cn.bmob.android:bmob-sms:1.0.1'注:1、如果你只需要Bmob提供的短信功能,那么你只需單獨(dú)配置bmob-sms,如果你既需要bmob的數(shù)據(jù)服務(wù),也需要短信服務(wù),那么你只需要配置bmob-sdk即可。2、每個(gè)版本的im都對(duì)應(yīng)特定版本的bmob-sdk,如果你使用的是1.1.8版本的im,那么配套的bmob-sdk的版本為3.3.5。使用的是1.1.9配套的bmob-sdk的版本為、與okhttp有關(guān)的配置依
8、賴(lài)不是必填項(xiàng),開(kāi)發(fā)者可以不添加該依賴(lài)。Eclipse直接拷貝到lib目錄下下面的例子均在Eclipse環(huán)境下完成2.添加權(quán)限<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_ST
9、ATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_LOGS"/>3.初始化BmobSDKpublic class MainAct
10、ivity extends Activity Override protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stub super.onCreate(savedInstanceState); / 初始化 Bmob SDK / 使用時(shí)請(qǐng)將第二個(gè)參數(shù)Application ID替換成你在Bmob服務(wù)器端創(chuàng)建的Application ID Bmob.initialize(this, "Your Application ID"); 二.數(shù)據(jù)操作首先我們把布局添加一下la
11、yout_main.xml<LinearLayout xmlns:android=" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="+id/btn_add" android:layout_width="fill_parent"
12、android:layout_height="wrap_content" android:text="添加數(shù)據(jù)" /> <Button android:id="+id/btn_update" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="更新數(shù)據(jù)" /> <Button android:id="+id/btn_dele
13、te" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="刪除數(shù)據(jù)" /> <Button android:id="+id/btn_query" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="查詢(xún)數(shù)據(jù)
14、" /></LinearLayout>然后實(shí)例化這四個(gè)Button private Button btn_add, btn_update, btn_delete, btn_query; btn_add = (Button) findViewById(R.id.btn_add); btn_add.setOnClickListener(this); btn_update = (Button) findViewById(R.id.btn_update); btn_update.setOnClickListener(this); btn_delete = (Button)
15、findViewById(R.id.btn_delete); btn_delete.setOnClickListener(this); btn_query = (Button) findViewById(R.id.btn_query); btn_query.setOnClickListener(this);因?yàn)榭紤]到有四個(gè)點(diǎn)擊事件,我們直接implements OnClickListener這樣也許更直觀一點(diǎn),所以onClick()方法就是這個(gè)樣子了 Override public void onClick(View v) switch (v.getId() /添加數(shù)據(jù) case R.id.b
16、tn_add: break; /更新數(shù)據(jù) case R.id.btn_update: break; /刪除數(shù)據(jù) case R.id.btn_delete: break; /查詢(xún)數(shù)據(jù) case R.id.btn_query: break; 準(zhǔn)備工作差不多都做完了?No,還有一件非常重要的事情要做1.創(chuàng)建JavaBean我們新建一個(gè)類(lèi)繼承BmobObject,具體操作看注釋package com.lgl.bmobdemo;import cn.bmob.v3.BmobObject;/* * javabean * * author lgl * */public class Bean extends B
17、mobObject /* * 這個(gè)javabean必須視情況而定,也就是你需要你的表上有什么信息你就加什么,當(dāng)然,前提是,你的表單上有 * 添加表單可以在Bmob應(yīng)用控制-數(shù)據(jù)瀏覽頁(yè)面操作,后續(xù)會(huì)講到 這里,我們假設(shè)有三個(gè)信息數(shù)據(jù),分別是姓名,年齡,分?jǐn)?shù) */ private String name; private int age; private int score; public String getName() return name; public void setName(String name) = name; public int getAge() retu
18、rn age; public void setAge(int age) this.age = age; public int getScore() return score; public void setScore(int score) this.score = score; 2.添加數(shù)據(jù)其實(shí)就是調(diào)用了Bean的get,set方法case R.id.btn_add: / new出這個(gè)bean Bean bean = new Bean(); / 分別設(shè)置相應(yīng)的信息 bean.setName("劉桂林"); bean.setAge(20); bean.setScore(100
19、); bean.save(this, new SaveListener() Override public void onSuccess() / 成功 Toast.makeText(MainActivity.this, "保存成功", 1) .show(); Override public void onFailure(int arg0, String arg1) / 失敗 Toast.makeText(MainActivity.this, "保存失敗", Toast.LENGTH_LONG) .show(); ); break;我們運(yùn)行程序,然后點(diǎn)擊添
20、加數(shù)據(jù),當(dāng)彈出Toast說(shuō)明保存成功后,我們回到Bmob官網(wǎng),找到我們的項(xiàng)目,點(diǎn)擊數(shù)據(jù)瀏覽,就會(huì)看到已經(jīng)保存的信息,這個(gè)就是我們的后臺(tái)了3.更新數(shù)據(jù)更新數(shù)據(jù),就是更新一條數(shù)據(jù)的記錄,就像你修改個(gè)人信息,本來(lái)是男,現(xiàn)在要修改成女一樣,但是,我們必須知道一點(diǎn),就是如下圖所示的objectid假設(shè)我先現(xiàn)在知道這個(gè)id,那我們的操作就可以這樣case R.id.btn_update: bean = new Bean(); bean.setObjectId("edec38a77d"); bean.setName("修改劉桂林"); bean.setScore(30
21、); bean.update(this, new UpdateListener() Override public void onSuccess() / 成功 Toast.makeText(MainActivity.this, "更新成功", 1).show(); Override public void onFailure(int arg0, String arg1) / 失敗 Toast.makeText(MainActivity.this, "更新失敗", 1).show(); );break;然后我們來(lái)運(yùn)行程序,點(diǎn)擊更新數(shù)據(jù),然后我們回到后臺(tái)去查
22、看4.刪除數(shù)據(jù)同樣的,你要?jiǎng)h除一條數(shù)據(jù),你還得知道人家的objectidcase R.id.btn_delete: bean = new Bean(); bean.setObjectId("edec38a77d"); bean.delete(this, new DeleteListener() Override public void onSuccess() /成功 Toast.makeText(MainActivity.this, "刪除成功", 1).show(); Override public void onFailure(int arg0, S
23、tring arg1) /失敗 Toast.makeText(MainActivity.this, "刪除失敗", 1).show(); ); break;然后我們運(yùn)行程序,點(diǎn)擊刪除數(shù)據(jù)后回到后臺(tái)可以看到,表明bean還在,但是數(shù)據(jù)已經(jīng)被刪除了5.查詢(xún)數(shù)據(jù)這幾個(gè)數(shù)據(jù)操作,唯一不同的就是查詢(xún)了,他必須使用到一個(gè)查詢(xún)的類(lèi)BmobQuery case R.id.btn_query: / BmobQuery<要查詢(xún)的數(shù)據(jù)表> 項(xiàng)目一般不會(huì)只有一張表的 BmobQuery<Bean> query = new BmobQuery<Bean>(); q
24、uery.findObjects(this, new FindListener<Bean>() Override public void onSuccess(List<Bean> arg0) / 成功 Toast.makeText(MainActivity.this, "查詢(xún)成功"+arg0.size(), 1).show(); Override public void onError(int arg0, String arg1) / 失敗 Toast.makeText(MainActivity.this, "查詢(xún)失敗", 1).
25、show(); ); break;然后我們點(diǎn)擊查詢(xún)之后,他返回的是一個(gè)List,這里我們就不詳細(xì)看List里面有什么了,表里只有一條數(shù)據(jù),我們直接Toast他的size5.1條件查詢(xún)跟數(shù)據(jù)庫(kù)操作是一樣的,你可以根據(jù)條件來(lái)查詢(xún),看代碼case R.id.btn_query: / BmobQuery<要查詢(xún)的數(shù)據(jù)表> 項(xiàng)目一般不會(huì)只有一張表的 BmobQuery<Bean> query = new BmobQuery<Bean>(); /條件查詢(xún) 我們查詢(xún)名稱(chēng)是劉桂林的數(shù)據(jù) query.addWhereEqualTo("name", &quo
26、t;劉桂林"); query.findObjects(this, new FindListener<Bean>() Override public void onSuccess(List<Bean> arg0) / 成功/ Toast.makeText(MainActivity.this, "查詢(xún)成功"+arg0.size(), 1).show(); for (Bean bean : arg0) Toast.makeText(MainActivity.this, "查詢(xún)成功"+bean.getName()+"-
27、"+bean.getAge(), 1).show(); Override public void onError(int arg0, String arg1) / 失敗 Toast.makeText(MainActivity.this, "查詢(xún)失敗", 1).show(); ); break;運(yùn)行的結(jié)果5.2單條查詢(xún)case R.id.btn_query: / BmobQuery<要查詢(xún)的數(shù)據(jù)表> 項(xiàng)目一般不會(huì)只有一張表的 BmobQuery<Bean> query = new BmobQuery<Bean>(); / 查詢(xún)單條
28、數(shù)據(jù) query.getObject(this, "9fe91ce9a6", new GetListener<Bean>() Override public void onFailure(int arg0, String arg1) / 失敗 Toast.makeText(MainActivity.this, "查詢(xún)失敗", 1).show(); Override public void onSuccess(Bean bean) / 成功 Toast.makeText(MainActivity.this, bean.getName()+&qu
29、ot;,"+bean.getAge(), 1).show(); ); break;這里你要單條數(shù)據(jù)查詢(xún)的話,你就必須只帶objectid才行,這里就不演示了三.登錄,注冊(cè),更新資料,修改密碼,郵箱驗(yàn)證前面廢話啰嗦了也有一大堆了,現(xiàn)在來(lái)聊聊實(shí)際點(diǎn)的東西,Bmob他畢竟是一個(gè)后臺(tái)數(shù)據(jù)管理的平臺(tái),所以前面才說(shuō)了一堆的數(shù)據(jù)操作,我們接下來(lái)要實(shí)現(xiàn)的功能就是用戶的注冊(cè)和登錄。1.注冊(cè)Bmob實(shí)現(xiàn)登錄注冊(cè),還有郵箱驗(yàn)證的功能,其實(shí)就是利用上面的數(shù)據(jù)操作,也就是增刪查改我們進(jìn)入后臺(tái)會(huì)看到用戶表單里面有一些字段這里寫(xiě)圖片描述這可不是固定的,而是根據(jù)我們的需求可以增加或者刪除的,默認(rèn)的是最基本的我們?yōu)榱?/p>
30、方便,新建一個(gè)工程BmobTest,然后把架包放在lib目錄下,添加相應(yīng)的權(quán)限以及在onCreate()方法里初始化Bmob,準(zhǔn)備工作做完了之后,我們開(kāi)始寫(xiě)代碼:我們還是用回上面的哪個(gè)Bean,因?yàn)橛脩裘兔艽a是不需要復(fù)寫(xiě)的,不過(guò)這里特別需要注意的是,這次我們不是繼承BmobObject,而是繼承BmobUser;* 我們要先搭建一個(gè)工程activity_main.xml<LinearLayout xmlns:android="http:/ xmlns:tools=" android:layout_width="match_parent" andr
31、oid:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請(qǐng)輸入用戶名" /> <EditText android:id="+i
32、d/et_pass" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請(qǐng)輸入密碼" /> <Button android:id="+id/btn_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint=
33、"登錄" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal" > <TextView android:id="+id/tv_etpass" android:layout_width="wr
34、ap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="修改密碼" /> <TextView android:id="+id/tv_register" android:layout_width="wrap_content" android:layout_height="wra
35、p_content" android:layout_weight="1" android:gravity="center" android:text="注冊(cè)用戶" /> </LinearLayout></LinearLayout>activity_register.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layo
36、ut_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請(qǐng)輸入用戶名"
37、/> <EditText android:id="+id/et_pass" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請(qǐng)輸入密碼" /> <Button android:id="+id/btn_register" android:layout_width="match_parent" android:layout_heig
38、ht="wrap_content" android:hint="注冊(cè)" /></LinearLayout>布局就是這樣,想必跳轉(zhuǎn)的邏輯也不用說(shuō)了吧,很簡(jiǎn)單的一個(gè)例子,那我們先來(lái)注冊(cè):RegisterActivitypackage com.lgl.bmobtest;import cn.bmob.v3.listener.SaveListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.V
39、iew.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class RegisterActivity extends Activity private Button btn_register; private EditText et_name, et_pass; Override protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated
40、 method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); btn_register = (Button) findViewById(R.id.btn_register); et_name = (EditText) findViewById(R.id.et_name); et_pass = (EditText) findViewById(R.id.et_pass); btn_register.setOnClickListener(new OnClickListener(
41、) Override public void onClick(View v) Bean bean = new Bean(); / 設(shè)置的內(nèi)容可以不需要,這里為了簡(jiǎn)便直接寫(xiě)死了 bean.setName("劉桂林"); bean.setAge(20); bean.setScore(100); bean.setUsername(et_name.getText().toString(); bean.setPassword(et_pass.getText().toString(); bean.signUp(RegisterActivity.this, new SaveListene
42、r() Override public void onSuccess() / 如果注冊(cè)成功,就finish()掉,也就是退回主界面 finish(); Override public void onFailure(int arg0, String arg1) Toast.makeText(RegisterActivity.this, "注冊(cè)失敗", Toast.LENGTH_LONG).show(); ); ); 我們把項(xiàng)目部署在模擬器上點(diǎn)擊注冊(cè)之后直接就finish()了說(shuō)明注冊(cè)成功了,我們進(jìn)Bmob后端控制臺(tái)去看一下表里面有數(shù)據(jù),說(shuō)明我們已經(jīng)注冊(cè)成功了用戶名是12345
43、 密碼是678902.登錄登錄其實(shí)是比較簡(jiǎn)單的case R.id.btn_login: Bean bean = new Bean(); bean.setUsername(et_name.getText().toString(); bean.setPassword(et_pass.getText().toString(); bean.login(this, new SaveListener() Override public void onSuccess() Toast.makeText(MainActivity.this, "登錄成功", Toast.LENGTH_LONG
44、) .show(); Override public void onFailure(int arg0, String arg1) Toast.makeText(MainActivity.this, "賬號(hào)或密碼錯(cuò)誤", Toast.LENGTH_LONG).show(); ); break;我們把項(xiàng)目部署在模擬器上3.更新用戶信息我們時(shí)常就是會(huì)碰到這么一個(gè)場(chǎng)景,自己的個(gè)人信息填寫(xiě)錯(cuò)了,需要修改這里我們?cè)谥鞑季旨右粋€(gè)Button <Button android:id="+id/btn_update" android:layout_width=&quo
45、t;match_parent" android:layout_height="wrap_content" android:hint="更新用戶信息" /> 更新信息的代碼其實(shí)和上面的數(shù)據(jù)操作是有異曲同工的case R.id.btn_update: / Bmob在登錄成功后會(huì)緩存 bean = BmobUser.getCurrentUser(this, Bean.class); bean.setName("劉桂林修改"); bean.update(this, new UpdateListener() Override p
46、ublic void onSuccess() Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_LONG) .show(); Override public void onFailure(int arg0, String arg1) ); break;我們把項(xiàng)目部署在模擬器上注意:我們更新用戶信息的前提是已經(jīng)登錄有圖有真相,我們看一下控制臺(tái)4.郵箱驗(yàn)證功能使用郵件驗(yàn)證功能,我們必須去后端控制臺(tái)開(kāi)啟這個(gè)功能里面的信息我們可以自定義,我們將之前注冊(cè)的過(guò)程進(jìn)行修改,如果覺(jué)得亂的會(huì)后續(xù)也會(huì)貼上源碼,其實(shí)就是加個(gè)郵箱而已bean.setEmail("748778890");然后我們把項(xiàng)目部署在模擬器上,我們項(xiàng)目注冊(cè)之后就有一個(gè)郵箱了是不是很神奇,我們來(lái)看看郵件的內(nèi)容,你會(huì)發(fā)現(xiàn),就是Bmob后臺(tái)的郵件信息,你是可以自定義的我們點(diǎn)擊鏈接如果我們沒(méi)有驗(yàn)證的話,就算你的注冊(cè)時(shí)能finish(),你也不能登錄的,挺實(shí)用的我們可以在登錄的時(shí)間寫(xiě)一個(gè)判斷if (bean.ge
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第二單元第十三課《控制輸出模塊工作》-教學(xué)設(shè)計(jì) 2023-2024學(xué)年粵教版(2019)初中信息技術(shù)八年級(jí)下冊(cè)
- 二零二五年度海域使用權(quán)轉(zhuǎn)讓及海洋資源綜合開(kāi)發(fā)合同
- 第14課 明朝的統(tǒng)治(教學(xué)設(shè)計(jì))2023-2024學(xué)年七年級(jí)下冊(cè)歷史(安徽專(zhuān)版)
- 二零二五年度旅游合作項(xiàng)目返點(diǎn)分紅協(xié)議
- 二零二五年度廚師餐飲行業(yè)廚藝大賽組織合同
- 2025年度股東協(xié)議補(bǔ)充協(xié)議:針對(duì)公司分立、合并后的股權(quán)處理
- 二零二五年度數(shù)字經(jīng)濟(jì)干股股份合作協(xié)議
- 第二單元第四節(jié)《視頻聲音顯效果-插入音視頻超鏈接》教學(xué)設(shè)計(jì) 2023-2024學(xué)年西交大版(2014)初中信息技術(shù)七年級(jí)下冊(cè)
- 二零二五年度全球供應(yīng)鏈風(fēng)險(xiǎn)管理合作協(xié)議
- 二零二五年度智能化停車(chē)服務(wù)車(chē)位租賃協(xié)議
- 無(wú)痛病房管理課件
- 讓孩子變成學(xué)習(xí)的天使——由《第56號(hào)教室的奇跡》讀書(shū)分享
- 球泡檢驗(yàn)標(biāo)準(zhǔn)
- 公安筆錄模板之詢(xún)問(wèn)嫌疑人(書(shū)面?zhèn)鲉局伟舶讣?
- 振動(dòng)分析基礎(chǔ)講義1
- 記賬憑證匯總表excel模板
- 鄧麗君經(jīng)典歌曲30首簡(jiǎn)譜(共33頁(yè))
- 故障診斷技術(shù)的國(guó)內(nèi)外發(fā)展現(xiàn)狀(共3頁(yè))
- 園林綠化施工通用表格模板
- 人民檢察院信訪案件終結(jié)辦法
評(píng)論
0/150
提交評(píng)論