个人移动开发者的最头疼的问题,就是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. jsp&servlet初体验——用户登录功能实现

    数据库准备-创建db_login数据库  t_user表 1.创建web工程 2.创建用户model   user.java package com.gxy.model; public class U ...

  2. Python练习之pillow

    此系列意在记录于一些有趣的程序及对其的总结. 问题来源: https://github.com/Yixiaohan/show-me-the-code https://github.com/HT524/ ...

  3. CommonsChunkPlugin相关

    参考https://webpack.js.org/guides/caching/#deterministic-hashes var path = require("path"); ...

  4. 豌豆夹Redis解决方案Codis源码剖析:Dashboard

    豌豆夹Redis解决方案Codis源码剖析:Dashboard 1.不只是Dashboard 虽然名字叫Dashboard,但它在Codis中的作用却不可小觑.它不仅仅是Dashboard管理页面,更 ...

  5. Android对话框Dialog深度剖析

    对话框 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 对话框设计 Dialog 类是对话框的基类,但您应该避免直接实例化 Di ...

  6. Python 2.7的字典实现简化版(C语言)

    这是一个能自动调整大小的哈希字典,外部接口实现了下列功能. 1.字典级别: 创建字典 dict_new 归零字典 dict_clear 2.键值级别: 查找 dict_search 强制查找 dict ...

  7. Android底部导航栏

    Android底部导航栏 今天简单写了一个底部导航栏,封装了一个库,用法比较简单 效果图 Github地址:https://github.com/kongqw/KqwBottomNavigation ...

  8. Github上的Android项目介绍之ListViewAnimation(针对listView item的侧滑菜单)(1)

    demo源码,需要可以下载 1.这是一个github开源项目,先去github上面下载,github下载地址. 2.将SwipeMenuListView项目,导入,然后新建项目如果要引用,要设置为相应 ...

  9. Intellij IDEA 插件开发之自建插件仓库

    Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA 的插件不能够对外公开时,我们就需要搭建自己的 Intellij IDEA 的插件仓库.前不久我们 ...

  10. 详解EBS接口开发之销售订单挑库发放

     1. 对销售订单的有效性验证     1)检查销售订单的行是否被完全传回客户化表     2)验证销售订单的关键字段     3)检查子库存是否启用了货位控制,如果启用了货位控制,没有生成货位, ...