Android使用後端雲Bmob實現登入、註冊及失物招領
最近在使用後端雲Bmob對資料進行儲存,目的是在不搭建伺服器的前提下,能對Android應用的資料進行操作處理。
二、網站後臺建立應用(如圖) 這裡使用的是免費版的
建立成功之後點選建立的應用進去,在設定->應用祕鑰中可以找到應用祕鑰
1、在 Project 的 build.gradle 檔案中新增 Bmob的maven倉庫地址
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' } } allprojects { repositories { jcenter() //Bmob的maven倉庫地址--必填 maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" } } } task clean(type: Delete) { delete rootProject.buildDir }
2、在app的build.gradle檔案中新增compile依賴檔案
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
**相容Android6.0系統所需,如果這句話報錯,可在dependencies標籤下使用compile 'cn.bmob.android:http-legacy:1.0'**
useLibrary 'org.apache.http.legacy'
...
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//以下SDK開發者請根據需要自行選擇
//bmob-sdk:Bmob的android sdk包,包含了Bmob的資料儲存、檔案等服務,以下是最新的bmob-sdk:
//3.5.5:請務必檢視下面註釋[1]
compile 'cn.bmob.android:bmob-sdk:3.6.3'
//bmob-push:Bmob的推送包
compile 'cn.bmob.android:bmob-push:0.8'
//bmob-im:Bmob的即時通訊包,注意每個版本的im依賴特定版本的bmob-sdk,具體的依賴關係可檢視下面註釋[2]
compile 'cn.bmob.android:bmob-im: [email protected]'
//如果你想應用能夠相容Android6.0,請新增此依賴(org.apache.http.legacy.jar)
compile 'cn.bmob.android:http-legacy:1.0'
}
3、在你的應用程式的AndroidManifest.xml檔案中新增相應的許可權:
<!--允許聯網 --> <uses-permission android:name="android.permission.INTERNET" /> <!--獲取GSM(2g)、WCDMA(聯通3g)等網路狀態的資訊 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--獲取wifi網路狀態的資訊 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--保持CPU 運轉,螢幕和鍵盤燈有可能是關閉的,用於檔案上傳和下載 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!--獲取sd卡寫的許可權,用於檔案上傳和下載--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允許讀取手機狀態 用於建立BmobInstallation--> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
四、應用中使用詳情 這裡演示部分的API 1、啟動頁
初始化BmobSDK:
//第一:預設初始化
Bmob.initialize(this, "Your Application ID");
2、由登入介面進入註冊頁面,進行賬戶註冊
輸入賬號密碼後點擊註冊按鈕:
final String registerName = accountRegisterName.getText().toString().trim();//賬號
final String registerPassword = accountRegisterPassword.getText().toString().trim();//密碼
if (TextUtils.isEmpty(registerName) || TextUtils.isEmpty(registerPassword)) {
showToast("註冊賬號或密碼為空");
return;
}
BmobUser bmobUser = new BmobUser();
bmobUser.setUsername(registerName);
bmobUser.setPassword(registerPassword);
bmobUser.signUp(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser bmobUser, BmobException e) {
if (e == null) {
showToast("恭喜,註冊賬號成功");
finish();
} else {
showToast("register fail:" + e.getMessage());
}
}
});
註冊成功後在後端雲Bmob後臺有信心記錄:
3、註冊成功後回到登入介面
輸入賬號密碼後點擊登入按鈕:
final String accountName = accountLoginName.getText().toString().trim();//賬號
final String accountPassword = accountLoginPassword.getText().toString().trim();//密碼
if (TextUtils.isEmpty(accountName)) {
showToast("賬號不能為空");
return;
}
if (TextUtils.isEmpty(accountPassword)) {
showToast("密碼不能為空");
return;
}
//登入過程
showProgressBar();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//BmobUser類為Bmob後端雲提供類
BmobUser bmobUser = new BmobUser();
bmobUser.setUsername(accountName);
bmobUser.setPassword(accountPassword);
bmobUser.login(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser bmobUser, BmobException e) {
if (e == null) {
//登入成功後進入主介面
Intent intent = new Intent(LoginActivity.this, LostAndFoundActivity.class);
startActivity(intent);
finish();
} else {
showToast(""+e.getMessage());
hiddenProgressBar();//隱藏
}
}
});
}
}, 3000);
4、登入成功後進入主介面,右上方按鈕進入失物招領的資訊釋出介面
4-1、資訊完成後,點選右上角點擊發布按鈕,此時需要新增資料: 先建立bean類,繼承BmobObject類
public class LostInfomationReq extends BmobObject{
private String title; //標題
private String phoneNum;//手機號碼
private String desc;//描述
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
4-2、釋出資訊:
LostInfomationReq lostInfomationReq = new LostInfomationReq();
lostInfomationReq.setTitle(titleName);//titleName為使用者輸入的標題
lostInfomationReq.setPhoneNum(num);//num為使用者輸入的號碼
lostInfomationReq.setDesc(descridle);//descridle為資訊描述
lostInfomationReq.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if (e == null) {
showToast("招領資訊釋出成功");
//成功後提示主介面重新整理資料
Intent intent = new Intent();
setResult(RESULT_OK, intent);
//成功後將頁面銷燬
finish();
} else {
showToast("資訊釋出失敗");
}
}
});
4-3、新增資料成功後,在後臺會有插入的資料:
5、主介面的資訊需要讀取後臺使用者插入的資料
資料的查詢:
BmobQuery<LostInfomationReq> lostInfomationReqBmobQuery = new BmobQuery<>();
lostInfomationReqBmobQuery.order("-updatedAt");//排序
lostInfomationReqBmobQuery.findObjects(new FindListener<LostInfomationReq>() {
@Override
public void done(List<LostInfomationReq> list, BmobException e) {
if (e == null) {
lostInfomationReqList = list;
lostAndFoundAdapter.setData(list);
recyclerView.setAdapter(lostAndFoundAdapter);
} else {
showToast("查詢資料失敗");
}
}
});
6、長按RecyclerView每條Item進行編輯與刪除操作
6-1、刪除操作即是將後臺中的將選中的資訊刪除
LostInfomationReq lostInfomationReq = new LostInfomationReq();
lostInfomationReq.setObjectId(lostInfomationReqList.get(position).getObjectId());
lostInfomationReq.delete(new UpdateListener() {
@Override
public void done(BmobException e) {
if (e == null) {
lostInfomationReqList.remove(position);
lostAndFoundAdapter.setData(lostInfomationReqList);
lostAndFoundAdapter.notifyDataSetChanged();
} else {
showToast("刪除資料失敗");
}
}
});
6-2、編輯操作即對資料進行修改
LostInfomationReq lostInfomationReq = new LostInfomationReq();
lostInfomationReq.setTitle(titleName);//titleName為使用者輸入的標題
lostInfomationReq.setPhoneNum(num);//num為使用者輸入的號碼
lostInfomationReq.setDesc(descridle);//descridle為資訊描述
lostInfomationReq.update(infomationReq.getObjectId(), new UpdateListener() {
@Override
public void done(BmobException e) {
if (e == null) {
showToast("更新資訊成功");
//更新資料後提示主介面進行資料重新整理
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
}
}
});
7、使用PopupWindow長按彈出框
//載入佈局檔案
View contentview = LayoutInflater.from(mContext).inflate(R.layout.pop_window_view,null);
final PopupWindow popupWindow = new PopupWindow(contentview, LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
//設定焦點
popupWindow.setFocusable(true);
//觸控框外
popupWindow.setOutsideTouchable(true);
//點選空白處的時候讓PopupWindow消失
popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
//設定偏移量
popupWindow.showAsDropDown(holder.time, 300, -100);
//showAsDropDown(View anchor):相對某個控制元件的位置(正左下方),無偏移
// showAsDropDown(View anchor, int xoff, int yoff):相對某個控制元件的位置,有偏移
//showAtLocation(View parent, int gravity, int x, int y):相對於父控制元件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以設定偏移或無偏移
//點選編輯按鈕
contentview.findViewById(R.id.edit_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//回撥給主介面,進行資料操作
mItemClickListener.onEditOrDeleteClick(pos, EDIT_CODE);
//銷燬彈出框
popupWindow.dismiss();
}
});
//點選刪除按鈕
contentview.findViewById(R.id.delete_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//回撥給主介面,進行資料操作
mItemClickListener.onEditOrDeleteClick(pos, DELETE_CODE);
//銷燬彈出框
popupWindow.dismiss();
}
});
8、總結 8-1、實現登入、註冊的過程: 使用Bmob提供專門的使用者類——BmobUser來自動處理使用者賬戶管理所需的功能。有了這個類,你就可以在你的應用程式中新增使用者賬戶功能。BmobUser是BmobObject的一個子類,它繼承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的關於使用者賬戶管理相關的功能。
8-2、失物招領: 這個過程中,我們對資料進行了新增、查詢、刪除以及更新操作,當然後端雲Bmob還不止提供了這些API,還有很多API還需要掌握。
以下是個人公眾號(longxuanzhigu),之後釋出的文章會同步到該公眾號,方便交流學習Android知識及分享個人愛好文章: