Android中的Bmob移動(dòng)后端云服務(wù)器功能
源碼下載:http://xiazai.jb51.net/201801/yuanma/BmobTest1.rar
PS:一般情況下,我們?cè)趯?xiě)android程序的時(shí)候,想要實(shí)現(xiàn)登錄注冊(cè)功能,可以選擇自己用servlet作為服務(wù)端來(lái)實(shí)現(xiàn)過(guò)濾沒(méi)有注冊(cè)過(guò)的用戶,但是太麻煩,而且不是隨時(shí)都可以用的。這里介紹一個(gè)移動(dòng)后端云服務(wù)器平臺(tái)bmob,這不僅可以實(shí)現(xiàn)云數(shù)據(jù)庫(kù)儲(chǔ)存,還可以獲取手機(jī)驗(yàn)證等,隨時(shí)隨地都很輕松,下面寫(xiě)一個(gè)小demo,實(shí)現(xiàn)一個(gè)登陸注冊(cè)功能,認(rèn)識(shí)增刪查改。下面我稍微寫(xiě)一個(gè)例子,簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄功能。
1:首先到bmob官網(wǎng),注冊(cè)一個(gè)賬號(hào),里面創(chuàng)建一個(gè)項(xiàng)目,如圖:
2:創(chuàng)建一個(gè)android項(xiàng)目,(AndroidStudio)
(1):添加依賴:在app下的build.gradle中添加
compile 'cn.bmob.android:bmob-sdk:3.4.6' compile 'com.squareup.okhttp:okhttp:2.4.0'//CDN文件服務(wù)使用okhttp相關(guān)包進(jìn)行文件的上傳和下載(必填) compile 'com.squareup.okio:okio:1.4.0' sourceSets { main.jniLibs.srcDirs = ['libs'] } useLibrary 'org.apache.http.legacy'
位置如圖:
(2)添加權(quán)限:
<!--允許聯(lián)網(wǎng)--> <uses-permission android:name="android.permission.INTERNET"/> <!--獲取GSM(2g)、WCDMA(聯(lián)通3g)等網(wǎng)絡(luò)狀態(tài)的信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--獲取wifi網(wǎng)絡(luò)狀態(tài)的信息--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--保持CPU運(yùn)轉(zhuǎn),屏幕和鍵盤(pán)燈有可能是關(guān)閉的,用于文件上傳和下載--> <uses-permission android:name="android.permission.WAKE_LOCK"/> <!--獲取sd卡寫(xiě)的權(quán)限,用于文件上傳和下載--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!--允許讀取手機(jī)狀態(tài) 用于創(chuàng)建BmobInstallation--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
(3):添加maven,到指定的云庫(kù)
(4:)初始化:
Bmob.initialize(this,"你的 應(yīng)用ID");
3:下面就是代碼了
寫(xiě)一個(gè)實(shí)體類person,
package cn.day1.model; import cn.bmob.v3.BmobObject; /** * Created by CMusketeer on 17/10/22. */ public class Person extends BmobObject { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
寫(xiě)三個(gè)布局,分別是注冊(cè)頁(yè)面,登錄頁(yè)面,登錄成功跳轉(zhuǎn)的頁(yè)面
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="cn.day1.bmobtest1.MainActivity"> <TextView android:gravity="center" android:textSize="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登錄" /> <EditText android:id="@+id/id_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="username"/> <EditText android:id="@+id/id_userpassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="password" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/id_ok" android:layout_width="0dp" android:text="登錄" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:id="@+id/id_register" android:text="注冊(cè)" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> </LinearLayout>
注冊(cè)頁(yè)面:register_layout.xml,先把各頁(yè)面都寫(xiě)了,后續(xù)就好辦了。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="cn.day1.bmobtest1.MainActivity"> <TextView android:gravity="center" android:textSize="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="注冊(cè)中心" /> <EditText android:id="@+id/id_register_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="username"/> <EditText android:id="@+id/id_register_userpassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="password" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/id_register_ok" android:text="注冊(cè)" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> </LinearLayout>
登錄成功頁(yè)面:success.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="成功登錄" android:gravity="center" android:textSize="50dp"/> </LinearLayout>
注冊(cè)Activity,RegisterActivity.java 功能:增
這里是一個(gè)簡(jiǎn)單的注冊(cè),里面沒(méi)有加判斷,所以,一個(gè)號(hào)可以重復(fù)注冊(cè),但是只有唯一ID。
package cn.day1.bmobtest1; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import cn.bmob.v3.listener.SaveListener; import cn.day1.model.Person; /** * Created by CMusketeer on 17/10/22. */ public class RegisterActivity extends Activity { private TextView register_user; private TextView register_password; private Button register_ok; private Person p2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register_layout); addControl();//加載控件 addRegisterShow();//注冊(cè)方法 } private void addRegisterShow() { register_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final String rUser=register_user.getText().toString().trim(); String rPassword=register_password.getText().toString().trim(); //判斷用戶名和密碼是否為空,如果為空則不能進(jìn)去。 if(rUser.length()>0&&rPassword.length()>0){ p2 = new Person(); p2.setName(rUser); p2.setPassword(rPassword); //插入方法 p2.save(RegisterActivity.this, new SaveListener() { @Override public void onSuccess() { // TODO Auto-generated method stub register_password.setText(""); register_user.setText(""); Toast.makeText(RegisterActivity.this, "添加數(shù)據(jù)成功,返回objectId為:" + p2.getObjectId(), Toast.LENGTH_SHORT).show(); } @Override public void onFailure(int code, String msg) { // TODO Auto-generated method stub Toast.makeText(RegisterActivity.this, "創(chuàng)建數(shù)據(jù)失敗:" + msg, Toast.LENGTH_SHORT).show(); } }); }else{ Toast.makeText(RegisterActivity.this, "用戶名或者密碼不能為空", Toast.LENGTH_SHORT).show(); } } }); } private void addControl() { register_user = (TextView) findViewById(R.id.id_register_username); register_password = (TextView) findViewById(R.id.id_register_userpassword); register_ok = (Button) findViewById(R.id.id_register_ok); } }
登錄頁(yè)面:MainActivity.java 功能:查
package cn.day1.bmobtest1; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.util.List; import cn.bmob.v3.Bmob; import cn.bmob.v3.BmobQuery; import cn.bmob.v3.listener.FindListener; import cn.day1.model.Person; public class MainActivity extends AppCompatActivity { private Person p2; private TextView lgUser; private TextView lgPassword; private Button btn_ok; private Button btn_rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bmob.initialize(this, "你的 應(yīng)用id"); setContentView(R.layout.activity_main); addControl(); addLogin(); } private void addLogin() { btn_rg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(MainActivity.this,RegisterActivity.class); startActivity(intent); } }); btn_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { BmobQuery<Person> query=new BmobQuery<Person>(); query.findObjects(MainActivity.this,new FindListener<Person>(){ String lgU=lgUser.getText().toString().trim(); String lgp=lgPassword.getText().toString().trim(); int panduan=1; @Override public void onSuccess(List<Person> list) { for(int i=0;i<list.size();i++){ String name=list.get(i).getName(); String password=list.get(i).getPassword(); Log.e("user","唯一 id:"+list.get(i).getObjectId()+"----"+name+"---"+password); if(name.equals(lgU) && password.equals(lgp)){ Toast.makeText(MainActivity.this, "登錄成功", Toast.LENGTH_SHORT).show(); panduan=2; //成功后panduan等于2,則跳出該循環(huán),并且把輸入快都清空,跳轉(zhuǎn)到指定頁(yè)面 lgUser.setText(""); lgPassword.setText(""); Intent intent=new Intent(MainActivity.this,Success.class); startActivity(intent); break; } } if(panduan==1){ Toast.makeText(MainActivity.this, "登錄失敗", Toast.LENGTH_SHORT).show(); } } @Override public void onError(int i, String s) { } }); } }); } private void addControl() { lgUser = (TextView) findViewById(R.id.id_username); lgPassword = (TextView) findViewById(R.id.id_userpassword); btn_ok = (Button) findViewById(R.id.id_ok); btn_rg = (Button) findViewById(R.id.id_register); } }
登錄成功頁(yè)面 Success.java
package cn.day1.bmobtest1; import android.app.Activity; import android.os.Bundle; /** * Created by CMusketeer on 17/10/22. */ public class Success extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.success); } }
總結(jié):
唯一id的獲取可以通過(guò)用戶名來(lái)獲取,當(dāng)用戶輸入用戶名時(shí),只要數(shù)據(jù)庫(kù)中用戶名和輸入的一致,則就可以list.get(i).getObjectId()
處理增刪查改
增: person = new Person(); person.setName(user); person.setAddress(password); person.save(new SaveListener<String>() { @Override public void done(String s, BmobException e) { if(e == null){ Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show(); } else{ } } }); 刪 Id可以通過(guò)查處所有的,從而得到id id=list.get(i).getObjectId(); person = new Person(); person.delete(id, new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ Log.e("sss","刪除成功"); } } }); 查 :和上面的查不大一樣,這也是一種方法 //查詢所有, query.findObjects(new FindListener<Person>() { @Override public void done(List<Person> list, BmobException e) { }} //查詢單個(gè) query.getObject(id,new listener) 改 person.setName(“111”); person.update(id,new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ // Toast.makeText(MainActivity.this, "更改成功", Toast.LENGTH_SHORT).show(); Log.e("sss","更改成功"); } }
效果圖:
總結(jié)
以上所述是小編給大家介紹的Android中的Bmob移動(dòng)后端云服務(wù)器功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android LeakCanary檢測(cè)內(nèi)存泄露原理
這篇文章主要介紹了分析LeakCanary檢測(cè)內(nèi)存泄露原理,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下2021-03-03關(guān)于Android 4.4相機(jī)預(yù)覽、錄像花屏的問(wèn)題的解決方法
這篇文章主要介紹了關(guān)于Android 4.4相機(jī)預(yù)覽、錄像花屏的問(wèn)題的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12Android 動(dòng)態(tài)的顯示時(shí)間
本文給大家分享一段代碼實(shí)現(xiàn)android動(dòng)態(tài)顯示時(shí)間,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12Android開(kāi)發(fā)中使用sqlite實(shí)現(xiàn)新聞收藏和取消收藏的功能
本篇文章主要介紹了sqlite實(shí)現(xiàn)新聞收藏和取消收藏功能,主要涉及到oracle數(shù)據(jù)庫(kù)方面的內(nèi)容,對(duì)于Android開(kāi)發(fā)sqlite實(shí)現(xiàn)收藏和取消功能感興趣的朋友可以參考下本文2016-11-11新浪微博第三方登錄界面上下拉伸圖片之第三方開(kāi)源PullToZoomListViewEx(一)
PullZoomView要實(shí)現(xiàn)兩類,一類是典型的Android ListView,另外一類是Android 的scroll view。本文先介紹PullZoomView在ListView上的實(shí)現(xiàn):PullToZoomListViewEx2015-12-12Android GridView中包含EditText的焦點(diǎn)重新獲取方法
這篇文章主要介紹了Android GridView中包含EditText的焦點(diǎn)重新獲取方法,實(shí)例分析了界面刷新時(shí)EditText重新獲取焦點(diǎn)的技巧,需要的朋友可以參考下2016-03-03Android實(shí)現(xiàn)瘋狂連連看游戲之加載界面圖片和實(shí)現(xiàn)游戲Activity(四)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之加載界面圖片和實(shí)現(xiàn)游戲Activity,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03