PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的。这里介绍一个移动后端云服务器平台bmob,这不仅可以实现云数据库储存,还可以获取手机验证等,随时随地都很轻松,下面写一个小demo,实现一个登陆注册功能,认识增删查改。下面我稍微写一个例子,简单实现注册登录功能。
1:首先到bmob官网,注册一个账号,里面创建一个项目,如图:
2:创建一个android项目,(AndroidStudio)
(1):添加依赖:在app下的build.gradle中添加 compile'cn.bmob.android:bmob-sdk:3.4.6'compile'com.squareup.okhttp:okhttp:2.4.0'//CDN文件服务使用okhttp相关包进行文件的上传和下载(必填)compile'com.squareup.okio:okio:1.4.0'sourceSets{main.jniLibs.srcDirs=['libs']}useLibrary'org.apache.http.legacy'位置如图:
(2)添加权限:
<!--允许联网--><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"/>(3):添加maven,到指定的云库
maven{url"https://raw.github.com/bmob/bmob-android-sdk/master"}(4:)初始化:Bmob.initialize(this,“你的 应用ID”);
3:下面就是代码了
写一个实体类person,
packagecn.day1.model;importcn.bmob.v3.BmobObject;/** * Created by CMusketeer on 17/10/22. */publicclassPersonextendsBmobObject{privateString name;privateString password;publicStringgetName(){returnname;}publicvoidsetName(String name){this.name=name;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(String password){this.password=password;}}写三个布局,分别是注册页面,登录页面,登录成功跳转的页面
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"><TextViewandroid:gravity="center"android:textSize="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录"/><EditTextandroid:id="@+id/id_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="username"/><EditTextandroid:id="@+id/id_userpassword"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="password"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/id_ok"android:layout_width="0dp"android:text="登录"android:layout_height="wrap_content"android:layout_weight="1"/><Buttonandroid:id="@+id/id_register"android:text="注册"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"/></LinearLayout></LinearLayout>注册页面:register_layout.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"><TextViewandroid:gravity="center"android:textSize="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="注册中心"/><EditTextandroid:id="@+id/id_register_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="username"/><EditTextandroid:id="@+id/id_register_userpassword"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="password"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/id_register_ok"android:text="注册"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"/></LinearLayout></LinearLayout>登录成功页面: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"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="成功登录"android:gravity="center"android:textSize="50dp"/></LinearLayout>注册Activity,RegisterActivity.java 功能:增
这里是一个简单的注册,里面没有加判断,所以,一个号可以重复注册,但是只有唯一ID。
packagecn.day1.bmobtest1;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importandroid.widget.Toast;importcn.bmob.v3.listener.SaveListener;importcn.day1.model.Person;/** * Created by CMusketeer on 17/10/22. */publicclassRegisterActivityextendsActivity{privateTextView register_user;privateTextView register_password;privateButton register_ok;privatePerson p2;@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.register_layout);addControl();//加载控件addRegisterShow();//注册方法}privatevoidaddRegisterShow(){register_ok.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View v){final String rUser=register_user.getText().toString().trim();String rPassword=register_password.getText().toString().trim();//判断用户名和密码是否为空,如果为空则不能进去。if(rUser.length()>0&&rPassword.length()>0){p2=newPerson();p2.setName(rUser);p2.setPassword(rPassword);//插入方法p2.save(RegisterActivity.this,newSaveListener(){@OverridepublicvoidonSuccess(){// TODO Auto-generated method stubregister_password.setText("");register_user.setText("");Toast.makeText(RegisterActivity.this,"添加数据成功,返回objectId为:"+p2.getObjectId(),Toast.LENGTH_SHORT).show();}@OverridepublicvoidonFailure(int code,String msg){// TODO Auto-generated method stubToast.makeText(RegisterActivity.this,"创建数据失败:"+msg,Toast.LENGTH_SHORT).show();}});}else{Toast.makeText(RegisterActivity.this,"用户名或者密码不能为空",Toast.LENGTH_SHORT).show();}}});}privatevoidaddControl(){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);}}登录页面:MainActivity.java 功能:查
packagecn.day1.bmobtest1;importandroid.content.Intent;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importandroid.widget.Toast;importjava.util.List;importcn.bmob.v3.Bmob;importcn.bmob.v3.BmobQuery;importcn.bmob.v3.listener.FindListener;importcn.day1.model.Person;publicclassMainActivityextendsAppCompatActivity{privatePerson p2;privateTextView lgUser;privateTextView lgPassword;privateButton btn_ok;privateButton btn_rg;@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);Bmob.initialize(this,"你的 应用id");setContentView(R.layout.activity_main);addControl();addLogin();}privatevoidaddLogin(){btn_rg.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View v){Intent intent=newIntent(MainActivity.this,RegisterActivity.class);startActivity(intent);}});btn_ok.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(View v){BmobQuery<Person>query=newBmobQuery<Person>();query.findObjects(MainActivity.this,newFindListener<Person>(){String lgU=lgUser.getText().toString().trim();String lgp=lgPassword.getText().toString().trim();int panduan=1;@OverridepublicvoidonSuccess(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,则跳出该循环,并且把输入快都清空,跳转到指定页面lgUser.setText("");lgPassword.setText("");Intent intent=newIntent(MainActivity.this,Success.class);startActivity(intent);break;}}if(panduan==1){Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();}}@OverridepublicvoidonError(int i,String s){}});}});}privatevoidaddControl(){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);}}登录成功页面 Success.java
packagecn.day1.bmobtest1;importandroid.app.Activity;importandroid.os.Bundle;/** * Created by CMusketeer on 17/10/22. */publicclassSuccessextendsActivity{@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.success);}}总结:
唯一id的获取可以通过用户名来获取,当用户输入用户名时,只要数据库中用户名和输入的一致,则就可以list.get(i).getObjectId()
处理增删查改 增: person=newPerson();person.setName(user);person.setAddress(password);person.save(newSaveListener<String>(){@Overridepublicvoiddone(String s,BmobException e){if(e==null){Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();}else{}}});删 Id可以通过查处所有的,从而得到id id=list.get(i).getObjectId();person=newPerson();person.delete(id,newUpdateListener(){@Overridepublicvoiddone(BmobException e){if(e==null){Log.e("sss","删除成功");}}});查 :和上面的查不大一样,这也是一种方法//查询所有,query.findObjects(newFindListener<Person>(){@Overridepublicvoiddone(List<Person>list,BmobException e){}}//查询单个query.getObject(id,newlistener)改 person.setName(“111”);person.update(id,newUpdateListener(){@Overridepublicvoiddone(BmobException e){if(e==null){// Toast.makeText(MainActivity.this, "更改成功", Toast.LENGTH_SHORT).show();Log.e("sss","更改成功");}}效果图: