安卓好东西之——Bmob云服务
作为一个比较菜鸡的新手安卓开发学习者,没有后端一直是我长久以来的痛,而就在最近,我发现了一个比较好的东东:Bmob云服务,它可以帮我们做很多后端能做的事情,据说不少创业公司都会选择使用云服务来作为他们的后台,而不是聘用一位后端开发人员。
首先要理解一个概念,就是Baas:后端即服务,它是专门为移动开发者提供整合云后端的边界服务(什么是边界服务我也不知道,这句话是从百度百科上摘抄而来),目前比较著名的几个提供Baas的公司有:AppCan,Firebase,StackMob,End.Js,Bmob,Atom14,LeanCloud等等,今天我主要就以Bmob为例介绍一下这类Baas服务的最基础用法,就以我的一个学校足球联赛的报名系统为例
首先,你要先注册一个账号(这不废话。。)其次,完成认证之后下载Bmob的SDK并且导相关的jar包和动态链接库就可以使用了,具体方法我在这里不仔细介绍,假设到这里你已经配置好了最基本的环境,我们可以直接开始学习。
其实报名系统能干什么事情呢?无非就是注册,登陆,填写个人信息嘛,在以往,就需要后端给你三个接口,你通过各种网络请求操作来实现这些接口,虽然说也不是太难,但是如果我们能把这步变得更简单一点,何乐而不为呢?而且省掉了你找后端的精力和时间,更重要的是,自己独立完成的话思想上一定是会统一嘛,能更顺手一些。
好,我们先来一个注册类,看代码
public class Person2 extends BmobUser {
}
好了,写完了。
什么???竟然这么简单!!!只需要继承BmobUser类,我们甚至什么也不用做。继承父类会得到父类的全部非静态,final属性,在这里,我们可以得到一个是用户名,一个密码,注册邮箱,注册手机号码,常用的注册需要用到的属性我们就都已经得到了。
那么注册代码的具体实现是什么呢?会很麻烦吗?
看代码
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.QueryListener;
import cn.bmob.v3.listener.SaveListener;
public class Main3Activity extends AppCompatActivity {
private Button queRen;
private EditText userName;
private EditText passWord;
private EditText email;
private BmobQuery<Person> bmobQuery = new BmobQuery<Person>();
private Person p1 = new Person();
private Person2 p2 = new Person2();
ActionCollor actionCollor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
userName = (EditText) findViewById(R.id.editText3);
passWord = (EditText) findViewById(R.id.editText4);
email = (EditText) findViewById(R.id.editText6);
actionCollor = new ActionCollor();
ActionCollor.addlist(this);
}
public void queRen(View view){
final String name = userName.getText().toString();
String pass = passWord.getText().toString();
String emailtext = email.getText().toString();
if(name.equals("")||pass.equals("")){
Toast.makeText(Main3Activity.this,"用户名/密码不能为空哦",Toast.LENGTH_SHORT).show();
return;
}
p2.setUsername(name);
p2.setPassword(pass);
p2.setEmail(emailtext);
p2.signUp(new SaveListener<Object>() {
@Override
public void done(Object o, BmobException e) {
if (e == null){
Toast.makeText(Main3Activity.this,"注册成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Main3Activity.this,Main2Activity.class);
startActivity(intent);
}else{
Toast.makeText(Main3Activity.this,"此用户名或此邮箱被注册过了哦",Toast.LENGTH_SHORT).show();
}
}
});
我写代码有点不规范,起名不规范,以后应该注意这个问题。好我们来看这个类,ActionCollor这个类我们暂且不看,是一个管理所有活动的一个类。我们主要看注册这一行为的具体实现。认真观察之后,我们发现这也太简单了吧!只需要实例化出来一个Preson2对象(刚才的那个注册类),然后在里面填入我们想要的注册信息,然后一句代码
就搞定!这个方法里的参数是一个***,当注册完成用它来告知用户注册成功与否。同时,这个方法还帮我们封装好了用户名和邮箱不能重复的方法,是不是简化了我们的工作很多呢?
注册搞完了,我们来看看登陆,其实一模一样嘛还是这个Person2类,只是方法不一样了
上代码
public void login(View view){
final String name = login_text.getText().toString();
final String password_text = password.getText().toString();
b2.setUsername(name);
b2.setPassword(password_text);
b2.login(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser user, BmobException e) {
if (e == null){
Toast.makeText(Main2Activity.this,"登陆成功!",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Main2Activity.this,MainActivity.class);
intent.putExtra("name", b2.getUsername());
startActivity(intent);
}else{
Toast.makeText(Main2Activity.this,"用户名或密码错误!",Toast.LENGTH_SHORT).show();
return;
}
}
});
和注册太类似了,不细说。
接下来就是报名,这里我们需要新建一个Player类
我们看一下它的具体实现:
package com.example.tonyn.youqiu;
import cn.bmob.v3.BmobObject;
/**
* Created by tonyn on 2017/3/13.
*/
public class Player extends BmobObject {
private String myname;
private String myschool;
private String phonenumber;
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public String getMyschool() {
return myschool;
}
public void setMyschool(String myschool) {
this.myschool = myschool;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
}
看好了,这里必须继承BmobObject类。
下面直接上代码吧,怎么实现报名(个人和组队)
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.SaveListener;
public class Main4Activity extends AppCompatActivity {
private EditText playername;
private EditText school;
private EditText phonenumber;
private Player player;
private String name;
private String myschool;
private String myphone;
private ActionCollor actionCollor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
playername = (EditText) findViewById(R.id.editText5);
school = (EditText) findViewById(R.id.editText7);
phonenumber = (EditText) findViewById(R.id.editText8);
player = new Player();
actionCollor = new ActionCollor();
ActionCollor.addlist(this);
}
public void simple(View view){
name = playername.getText().toString();
myschool = school.getText().toString();
myphone = phonenumber.getText().toString();
player.setMyname(name);
player.setMyschool(myschool);
player.setPhonenumber(myphone);
player.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if (e == null){
Toast.makeText(Main4Activity.this,"您已成功报名!请等待我们的通知!",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(Main4Activity.this,"报名失败,请稍后重试!(您是否已经报过名?)",Toast.LENGTH_SHORT).show();
}
}
});
}
public void team(View view){
name = playername.getText().toString();
myschool = school.getText().toString();
myphone = phonenumber.getText().toString();
player.setMyname(name);
player.setMyschool(myschool);
player.setPhonenumber(myphone);
player.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if (e == null){
}else {
Toast.makeText(Main4Activity.this,"报名失败,请稍后重试!(您是否已经报过名?)",Toast.LENGTH_SHORT).show();
}
}
});
Intent intent = new Intent(Main4Activity.this,Main5Activity.class);
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main4,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.quit:
ActionCollor.finashall();
break;
}
return true;
}
}
我们看出来,关键就是这个player.save()方法,其他操作与注册登陆无二,组队报名的代码也在上面了,下面直接贴出来队伍这个类就好了
public class Team extends BmobObject {
private String teamname;
private String teamer;
public String getTeamname() {
return teamname;
}
public void setTeamname(String teamname) {
this.teamname = teamname;
}
public String getTeamer() {
return teamer;
}
public void setTeamer(String teamer) {
this.teamer = teamer;
}
}
我们可以实验一下,下面上实验图片。
接下来我们去后台看一下
很好,拿到了!其他的我们就不在这里测试了,快去享受Bmob带给我们的***吧!!