个人移动开发者的最头疼的问题,就是App的网络后台,包含数据库等,国外目前有比较成熟的解决方案,但是限制于墙的问题,推荐国内的解决方案,比较出名的是Bmob和AVOS cloud和Atom等,这一次我们重点介绍Bmob

使用步骤

1.下载android SDK,里卖包括一个简单的demo和Bmob的两个jar包,可能还有一些Okhttp这类的Jar包,只需要把和Bmob相关的jar包复制到app底下的libs下

2.android studio下需要邮件app项目,打开module setting,选中dependency,电击右上角的加号,选择从文件添加,找到libs下面的jar包,依次加入

3.打开快速开发文档,在manifest里面导入需要的权限,注意javaBean需要继承BmobObjext,这个类封装了网络操作像在本地一样执行存贮然后,在activity里面初始化

4.还有不懂的看demo和开发文档,左边栏是导航很清楚

Bmob的数据库和后台推送,以及短信和app网页这些技术很好,我仅仅使用了数据库的功能

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

下面简要介绍我的demo,是一个和手台数据库交互的登陆系统,包括注册和登陆界面,会有各种的输入检查,包括手机号是否重复,密码和再次输入的密码是否一致,是否为空等,注册后的信息存放在数据库,登陆成功后进入一个空的Activity,显示Toast登陆成功

废话不多说,代码如下

登陆类代码

package com.example.euler_kalvinhe.bmobtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.List;

import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;

/**
 * Created by Euler-KalvinHe on 2015/8/24.
 */
public class LoginActivity extends Activity {
    private EditText userName,password;
    private Button login,regeter;
    String username,pass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        initViews();
        Toast.makeText(LoginActivity.this,username+pass,Toast.LENGTH_LONG).show();
        Bmob.initialize(this, "79bda8edfbabc323575348b6d50508e6");
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                username = userName.getText().toString();
                pass = password.getText().toString();
                BmobQuery<User> query = new BmobQuery<User>();
                query.addWhereEqualTo("userName",username);
                query.findObjects(LoginActivity.this,new FindListener<User>() {
                    @Override
                    public void onSuccess(List<User> users) {
                        String str = null;
                        str = users.get(0).getPassword();
                        if (str.equals(pass)){
                            Intent intent = new Intent(LoginActivity.this,OutActivity.class);
                            startActivity(intent);
                        }else{
                            Toast.makeText(LoginActivity.this,"用户名或者密码不正确",Toast.LENGTH_LONG).show();
                        }
                       // Toast.makeText(LoginActivity.this,str,Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(int i, String s) {
                        Toast.makeText(LoginActivity.this,"登录失败",Toast.LENGTH_LONG).show();
                    }
                });
            }
        });
        regeter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LoginActivity.this,RegesterActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
    private void initViews(){
        userName = (EditText) findViewById(R.id.userName);
        login = (Button) findViewById(R.id.log);
        password = (EditText) findViewById(R.id.password);
        regeter = (Button) findViewById(R.id.regester);
    }
    private void logIn(){
        username = userName.getText().toString();
        pass = password.getText().toString();

    }
    private String queryPass(String username){
        final String[] passTwo = {null};
        if (username == null){
            return null;
        }
        BmobQuery<User> query = new BmobQuery<User>();
        query.addWhereEqualTo("userName",username);
        query.findObjects(LoginActivity.this,new FindListener<User>() {
            @Override
            public void onSuccess(List<User> users) {
                passTwo[0] = users.get(0).getPassword();
                Toast.makeText(LoginActivity.this,passTwo[0],Toast.LENGTH_LONG).show();
            }

            @Override
            public void onError(int i, String s) {
                Toast.makeText(LoginActivity.this,"登录失败",Toast.LENGTH_LONG).show();
            }
        });
        return passTwo[0];
    }
}

注册类代码

package com.example.euler_kalvinhe.bmobtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
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.bmob.v3.listener.SaveListener;

public class RegesterActivity extends Activity{
    private EditText userName, phoneNumber, password, passwordAgain;
    private Button regester,login;
    private String username,pass,passAgain;
    private String phone;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.regester);
        initViews();
        Bmob.initialize(this, "79bda8edfbabc323575348b6d50508e6");
        regester.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                regesterUser();
            }
        });
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(RegesterActivity.this,LoginActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

    private void initViews() {
        regester = (Button) findViewById(R.id.regester);
        passwordAgain = (EditText) findViewById(R.id.passwordAgain);
        password = (EditText) findViewById(R.id.password);
        phoneNumber = (EditText) findViewById(R.id.phoneNumber);
        userName = (EditText) findViewById(R.id.userName);
        login = (Button) findViewById(R.id.login);
    }
    private void regesterUser(){
        username = userName.getText().toString();
        pass = password.getText().toString();
        passAgain = passwordAgain.getText().toString();
        phone = phoneNumber.getText().toString();
        if (username != null && pass != null && password != null && phone != null ){
            if ( pass.equals(passAgain)){
            BmobQuery<User> query = new BmobQuery<User>();
            query.findObjects(RegesterActivity.this,new FindListener<User>() {
                @Override
                public void onSuccess(List<User> users) {
                    boolean flag = false;
                    for (User u:users){
                        if (phone.equals(u.getPhoneNumber())){
                            flag = true;
                            break;
                        }
                    }
                    if (flag){
                        phoneNumber.setText("");
                        Toast.makeText(RegesterActivity.this, "手机号已经被注册,请重试", Toast.LENGTH_LONG).show();
                    }else{
                        User user = new User();
                        user.setUserName(username);
                        user.setPassword(pass);
                        user.setPhoneNumber(phone);
                        user.save(RegesterActivity.this,new SaveListener() {
                            @Override
                            public void onSuccess() {
                                Toast.makeText(RegesterActivity.this,"注册成功",Toast.LENGTH_LONG).show();
                                Intent intent = new Intent(RegesterActivity.this,LoginActivity.class);
                                startActivity(intent);
                                finish();
                            }

                            @Override
                            public void onFailure(int i, String s) {
                                Toast.makeText(RegesterActivity.this,"注册失败",Toast.LENGTH_LONG).show();
                            }
                        });
                    }
                }

                @Override
                public void onError(int i, String s) {
                    Toast.makeText(RegesterActivity.this,"请检查网络重试",Toast.LENGTH_LONG).show();
                }
            });}else{
                password.setText("");
                passwordAgain.setText("");
                Toast.makeText(RegesterActivity.this,"密码不一致,请重试",Toast.LENGTH_LONG).show();
            }
        }else {
            userName.setText("");
            password.setText("");
            passwordAgain.setText("");
            phoneNumber.setText("");
            Toast.makeText(RegesterActivity.this,"不能为空",Toast.LENGTH_LONG).show();
        }
    }
}

javaBmob代码

package com.example.euler_kalvinhe.bmobtest;

import cn.bmob.v3.BmobObject;

/**
 * Created by Euler-KalvinHe on 2015/8/24.
 */
public class User extends BmobObject{
    private String userName;
    private String phoneNumber;
    private String password;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

主类代码

package com.example.euler_kalvinhe.bmobtest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

/**
 * Created by Euler-KalvinHe on 2015/8/24.
 */
public class OutActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this,"登陆成功",Toast.LENGTH_LONG).show();
    }
}

布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/userName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="用户名"/>
    <EditText
        android:id="@+id/phoneNumber"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="电话号码"/>
    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密码"/>
    <EditText
        android:id="@+id/passwordAgain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="确认密码"/>
    <Button
    android:id="@+id/regester"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="注册"
    />
    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="返回登录"
        />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/userName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="用户名"/>
    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="密码"/>
    <Button
        android:id="@+id/log"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登陆"
        />
    <Button
        android:id="@+id/regester"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册"
        />
</LinearLayout>

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

github项目地址,大家可以去下载项目源码

https://github.com/fengsehng/BmobTest

Android移动后端服务(BAAS)快速搭建后台服务器之Bmob-android学习之旅(75)的更多相关文章

  1. Azure 中快速搭建 FTPS 服务

    FTP,FTPS 与 SFTP 的区别 FTP (File Transfer Protocol)是一种常用的文件传输协议,在日常工作中被广泛应用.不过,FTP 协议使用明文传输.如果文件传输发生在公网 ...

  2. 快速搭建FTP服务

    Linux下ftp服务可以通过搭建vsftpd服务来实现,以CentOS为例,首先查看系统中是否安装了vsftpd,可以通过执行命令 rpm -qa | grep vsftpd 来查看是否安装相应的包 ...

  3. Windows服务的快速搭建与调试(C#图解)

    Windows服务的快速搭建与调试(C#图解)   目录 一.什么是Windows 服务? 二.创建Windows 服务与安装/卸载批处理. 三.调试Windows 服务. 正文 一.什么是Windo ...

  4. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  5. Go语言micro之快速搭建微服务

    背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...

  6. 使用 python -m SimpleHTTPServer 快速搭建http服务

    摘要: 在 Linux 服务器上或安装了 Python 的机器上,可以使用 nohup python -m SimpleHTTPServer [port] & 快速搭建一个http服务. 在 ...

  7. 快速搭建http服务:共享文件--Java的我,不知Python你的好

    在 Linux 服务器上或安装了 Python 的机器上, 我们可以在指定的文件目录下,使用  python -m SimpleHTTPServer 快速搭建一个http服务,提供一个文件浏览的web ...

  8. 使用 python快速搭建http服务

    在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer. 我们可以很简单的使用  python -m SimpleHTTPSer ...

  9. python快速搭建http服务

    在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器. 如果python为2.x,则可执行:$ python -m SimpleH ...

随机推荐

  1. DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)

    这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...

  2. kafka topic 相关操作

    1.列出集群中的topic bin/kafka-topics.sh --zookeeper spark1:2181,spark2:2181,spark3:2181 --list 2.创建topic r ...

  3. SpringMVC 教程 - Handler Method

    原文链接:https://www.codemore.top/cates/Backend/post/2018-04-21/spring-mvc-handler-methods 由注解@RequestMa ...

  4. Java中的内存分配

    Java程序在运行时,需要在内存中分配空间,为了提高效率,就对空间进行了不同区域的划分,因为每一片区域否有特定的处理数据方式和内存管理方式. 1.栈存储局部变量 2.堆存储new出来的东西 3.方法区 ...

  5. 在web应用中使用Log4j 2

    Using Log4j 2 inWeb Applications (在web应用中使用Log4j 2) 来源:http://logging.apache.org/log4j/2.x/manual/we ...

  6. Bootstrap3 栅格系统-Less mixin 和变量

    除了用于快速布局的预定义栅格类,Bootstrap 还包含了一组 Less 变量和 mixin 用于帮你生成简单.语义化的布局. 变量 通过变量来定义列数.槽(gutter)宽.媒体查询阈值(用于确定 ...

  7. 【SSH系列】深入浅出SpringMvc+入门Demo

    Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC和Struts.Strut ...

  8. GDALWarp设置GDALWarpOptions::dfWarpMemoryLimit过大时处理失败

    使用GDALWarp写了一个裁切图像的算法,在小内存的电脑没事,大内存的电脑就处理失败(32位也没问题),查看GDAL的日志发现下面的错误信息: Fri Apr 08 17:39:02 2016: G ...

  9. java集合循环删除

    java集合循环删除,java list集合操作,java循环.分享牛,分享牛原创.java集合删除方法. 2.6.1.第一种方式 list.add("1"); list.add( ...

  10. Android开发指南--0 总览

    无意间发现一个网站,主打IOS方面的教程,然而作为一个Android开发者,我就找了下网站里有没有Android的教程,还真有,这里就翻译一下. 翻译目标教程:https://www.raywende ...