作为一个比较菜鸡的新手安卓开发学习者,没有后端一直是我长久以来的痛,而就在最近,我发现了一个比较好的东东: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带给我们的***吧!!