前一阶段看徐宜生写的Android群英传里面介绍的搭建云端服务器,那个时候自己不懂,加上有其他的学习,就没有深入,但是这两天找了资料研究了一下,读了官方文档,感觉挺不错的,服务端不用自己搭建了。(听说集成了好多东西,可以聊天、支付、分享、注册什么的)那就自己模拟一下注册登录吧。

环境搭建

第一步:首先去Bmob官网注册自己的账号,创建自己的项目,获取到自己的专属AppLication ID,这个在初始化的时候需要用到的。

注册完成并且创建好项目后,点击设置,就会看到这个,在这里可以获取到用于初始化的AppLication ID

第二步:下载需要的sdk,然后把下载好的sdk里面的BmobSDK_V3.4.5_1111.jar这个文件放到libs目录下面(解压出来的有四个,我这里没有用到其他的三个,有用到的可以一起放到libs目录下),然后右键选择Add library,点击确定即可。这里提供官方集成文档地址,关于集成和介绍,官方写的很详细:http://docs.bmob.cn/android/developdoc/index.html?menukey=develop_doc&key=develop_android

第三步:既然项目已经创建,需要的资源也已经搭建好,开始我们的工作了,我先说下,这里我们需要以下的几个文件,LoginActivity(登录) RegisterActivity(注册) MAinInfoActivity(登录成功返回的信息) User(用户信息bean)

其实很简单,在这里我直接上代码,因为Bmob已经为我们写好了后台,对于数据库的增删改查都已经封装好了,我们只是简单的调用就行(必要的解释我写在注释里面)

User.java:

public class User extends BmobUser {//这个BmobFile是特有的,我们可以用来上传我们的图片(头像资源)private BmobFile icon;public BmobFile getIcon() {return icon;}public void setIcon(BmobFile icon) {this.icon = icon;}
}

LoginActivity.java:

package com.example.wuyinlei.mybomb;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.listener.SaveListener;public class LoginActivity extends AppCompatActivity implements View.OnClickListener {private EditText etusername;private EditText etpassword;private Button login;private Button sign;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);//这里的AppLication ID 写上自己创建项目得到的那个AppLication IDBmob.initialize(this, "Application ID");initialize();initView();}private void initView() {}private void initialize() {etusername = (EditText) findViewById(R.id.et_username);etpassword = (EditText) findViewById(R.id.et_password);login = (Button) findViewById(R.id.login);login.setOnClickListener(this);sign = (Button) findViewById(R.id.sign);sign.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.login:final String username = etusername.getText().toString();String password = etpassword.getText().toString();if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)){final BmobUser bmobUser = new BmobUser();bmobUser.setUsername(username);bmobUser.setPassword(password);bmobUser.login(LoginActivity.this, new SaveListener() {@Overridepublic void onSuccess() {//获取到当前用户的信息User user = BmobUser.getCurrentUser(LoginActivity.this,User.class);Intent intent = new Intent(LoginActivity.this,MainInfoActivity.class);intent.putExtra("user",user);startActivity(intent);//登录成功Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onFailure(int i, String s) {}});}break;case R.id.sign:Intent intent = new Intent(this,RegisterActivity.class);startActivity(intent);break;}}
}

activity_login.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="com.example.wuyinlei.mybomb.LoginActivity"><EditText
        android:id="@+id/et_username"android:hint="登录名"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditText
        android:id="@+id/et_password"android:hint="密码"android:layout_width="match_parent"android:layout_height="wrap_content" /><LinearLayout
       android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><Button
           android:id="@+id/login"android:layout_width="0dp"android:layout_weight="1"android:text="登录"android:layout_height="wrap_content" /><Button
           android:id="@+id/sign"android:text="注册"android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>

RegisterActivity.java:

package com.example.wuyinlei.mybomb;import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import java.io.File;import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.listener.SaveListener;
import cn.bmob.v3.listener.UploadFileListener;public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {private EditText etusername;private EditText etpassword;private EditText etemail;private EditText eticon;private Button register;private Button cancel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);initialize();}private void initialize() {etusername = (EditText) findViewById(R.id.et_username);etpassword = (EditText) findViewById(R.id.et_password);etemail = (EditText) findViewById(R.id.et_email);register = (Button) findViewById(R.id.register);register.setOnClickListener(this);cancel = (Button) findViewById(R.id.cancel);cancel.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.register:registerData();break;case R.id.cancel:break;}}/*** 注册*/private void registerData() {final String name = etusername.getText().toString();final String password = etpassword.getText().toString();final String email = etemail.getText().toString();String path ;//获取图片文件的路径(我在个文件路径下面放了一个1.jpg图片)path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/1.jpg";final BmobFile bmobFile = new BmobFile(new File(path));bmobFile.upload(this, new UploadFileListener() {@Overridepublic void onSuccess() {//上传成功User user = new User();user.setUsername(name);//user.setIcon(icon);user.setEmail(email);user.setPassword(password);user.setIcon(bmobFile);//注册(这个是已经提供好的接口)user.signUp(RegisterActivity.this, new SaveListener() {@Overridepublic void onSuccess() {Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onFailure(int i, String s) {Toast.makeText(RegisterActivity.this, s.toString(), Toast.LENGTH_SHORT).show();}});}@Overridepublic void onFailure(int i, String s) {Log.d("RegisterActivity", "报错了" + s.toString());}});}
}

activity_register.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:orientation="vertical"android:layout_height="match_parent"tools:context="com.example.wuyinlei.mybomb.RegisterActivity"><EditText
        android:id="@+id/et_username"android:hint="登录名"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditText
        android:id="@+id/et_password"android:hint="密码"android:layout_width="match_parent"android:layout_height="wrap_content" /><EditText
        android:id="@+id/et_email"android:hint="邮箱"android:layout_width="match_parent"android:layout_height="wrap_content" /><LinearLayout
        android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><Button
            android:id="@+id/register"android:layout_width="0dp"android:layout_weight="1"android:text="注册"android:layout_height="wrap_content" /><Button
            android:id="@+id/cancel"android:text="取消"android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content" /></LinearLayout>
</LinearLayout>

MainInfoActivity.java:

package com.example.wuyinlei.mybomb;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;import cn.bmob.v3.datatype.BmobFile;public class MainInfoActivity extends AppCompatActivity {private TextView etusername;private ImageView icon;private User user;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);user = (User) getIntent().getSerializableExtra("user");initialize();}private void initialize() {etusername = (TextView) findViewById(R.id.et_username);icon = (ImageView) findViewById(R.id.icon);etusername.setText(user.getUsername());BmobFile file = user.getIcon();//加载全图//file.loadImage(this,icon);//加载缩略图  自己定义大小和质量第三个第四个参数是我们要加载图片显示的大小,第五个是显示的质量(100最好)file.loadImageThumbnail(this,icon,100,100,50);}
}

main_info_activity.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=".MainInfoActivity"><TextView
        android:textSize="24dp"android:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content"/><ImageView
        android:id="@+id/icon"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

基本上所有的代码都在上面了,这里需要解释的一个,User表,在使用的时候自动创建,然后我们可以使用它暴漏出来的接口去增删改查,实际上我们的模拟登陆就是使用了增、查、显示我们查到的数据。我们来看下实现的效果:

这里我们看到基本的逻辑都实现了,只是界面有待优化哈。好了,今天就到这里了,如果后期有时间,会对Bmob有点讲解。后面会有一个关与基于Bmob的使用完成的便签功能(也是很简单实现的)。

说明

以上的关于有网友说代码错误,再此说下,bmob的版本升级,关于某些方法已经弃用,导致导入代码之后有误,这里我最近也写了一些demo,也是运用的bmob的注册登录,大家可以去看下。https://github.com/wuyinlei/MyHearts(仿我心的一个demo,里面会有其他的一般开发会用到的知识)。
如果你仅仅是想看bmob的注册登录,这里我会写给出以下两个和bmob有关的两个类。

  • 注册类
    https://github.com/wuyinlei/MyHearts/blob/master/app/src/main/java/ruolan/com/myhearts/ui/register/RegisterSecondActivity.java
 /** * 进行注册 */ private void doRegister() { CustomPrograss.show(this,getResources().getString(R.string.register_loading),false,null);String userName = mEditName.getText().toString().trim();final MyUser myUser = new MyUser();if (RegularUtils.isUsername(userName)) {myUser.setUsername(userName);myUser.setPassword(pwd);myUser.setMobilePhoneNumber(phone);addSubscription(myUser.signUp(new SaveListener<MyUser>() {@Override public void done(MyUser myUser, BmobException e) {if (e == null) {Toast.makeText(RegisterSecondActivity.this,getResources().getString(R.string.register_success),Toast.LENGTH_SHORT).show();PreferencesUtils.putString(RegisterSecondActivity.this,"user",userName);PreferencesUtils.putString(RegisterSecondActivity.this,"pwd",pwd);startActivity(new Intent(RegisterSecondActivity.this,LoginActivity.class));CustomPrograss.disMiss(); } else { //注册失败 Toast.makeText(RegisterSecondActivity.this,getResources().getString(R.string.register_failed),Toast.LENGTH_SHORT).show();CustomPrograss.disMiss(); } } })); } } 
  • 登录逻辑
    https://github.com/wuyinlei/MyHearts/blob/master/app/src/main/java/ruolan/com/myhearts/ui/login/LoginActivity.java
 /*** 登录账户** @param name 用户名* @param pwd  密码*/private void toLogin(String name, String pwd) {CustomPrograss.show(this, getResources().getString(R.string.loading), false, null);final BmobUser bmobUser = new BmobUser();bmobUser.setUsername(name);bmobUser.setPassword(pwd);bmobUser.loginObservable(BmobUser.class).subscribe(new Subscriber<BmobUser>() {@Overridepublic void onCompleted() {CustomPrograss.disMiss();Toast.makeText(LoginActivity.this,getResources().getString(R.string.login_success),Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable e) {CustomPrograss.disMiss();}@Overridepublic void onNext(BmobUser bmobUser) {if (!mIsPasswordMemory.isChecked()) {  //如果用户没有点击记住密码  那就清除密码PreferencesUtils.putBoolean(LoginActivity.this, "is_select", false);PreferencesUtils.putString(LoginActivity.this, "pwd", "");PreferencesUtils.putString(LoginActivity.this,"user","");} else { //否则就保存密码PreferencesUtils.putBoolean(LoginActivity.this, "is_select", true);PreferencesUtils.putString(LoginActivity.this, "pwd", pwd);PreferencesUtils.putString(LoginActivity.this,"user",name);}MyUser myUser = BmobUser.getCurrentUser(MyUser.class);//   myUser.setUsername(name);EventBus.getDefault().post(new LoginEvent(myUser));// Intent intent = new Intent(LoginActivity.this, MainActivityDrawerLayout.class);//  intent.putExtra(Contants.IS_COME_FROM_LOGIN, true);// startActivity(intent);finish();}});}

最后

这里再次说明以下,以上最新注册登录逻辑在https://github.com/wuyinlei/MyHearts这个地址,怎么导入这个方法已经有了详细说明(如果有疑问可以添加qq联系)。还有就是最好看下bmob的官网,看下他们的文档。

使用Bmob云端服务器模拟简单的注册登录相关推荐

  1. spring mvc 模拟数据库实现注册 登录

    model层代码,用户 package com.entity; import java.io.Serializable;public class User implements Serializabl ...

  2. C++控制台实现简单的注册登录

    C++控制台实现简单的注册登录 #include<iostream>#include<string>#include <vector>#include <co ...

  3. PHP+Mysql 实现最简单的注册登录

    PHP+Mysql 实现最简单的注册登录 一.先将两个服务打开 二.创建数据库 create database test; // 创建一个叫test的数据库 use test; // 进入这个数据库 ...

  4. 用Python基础创建一个简单的注册登录系统

    在学完Python基础后,是不是有一点想法去做一点好玩的程序呢?如果想可以看看这个注册登录系统,会带给你一些思路. 大家都对登录注册系统司空见惯了吧,我们周围的许多东西都需要登录注册系统,例如很受大众 ...

  5. 拳头账号注册服务器异常,拳头账号注册登录不了解决方法

    很多人都在注册拳头账号,但是在注册的过程中也遇见了很多的问题,最常见的的就是没有办法登录,或者显示错误代码.遇见这些情况又应该怎么处理呢?相信大家一定也想知道,接下来小编就为大家分享一下拳头账号注册登 ...

  6. 【Unity+MySQL】实现简单的注册登录系统

    目录 1 安装Unity引擎和Navicat软件 2 安装MySQL8.0数据库 2.1 下载msi文件 2.2 安装MySQL Server 8.0 2.3 配置环境变量 2.4 安装MySQL服务 ...

  7. bmob移动云服务器,第二篇-bmob云端服务器的发现

    Java compiler level does not match解决方法 从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description  Resource P ...

  8. node.js(node.js+mongoose小案例)_实现简单的注册登录退出

    一.前言 通过node.js基本知识对node.js基本知识的一个简单应用 1.注册 2.登录 3.退出 二.基本内容 1.项目结构搭建如图所示 2.这个小案列中用到了art-template子模板以 ...

  9. 使用原生js写一个简单的注册登录页面

    目录 1.注册页面 2.登录页面 1.首先是我们的注册页面 这是我们的html骨架  <!DOCTYPE html> <html lang="en">< ...

最新文章

  1. CCleaner v5.55.7108 发布,新增软件升级功能
  2. MJExtension 模型嵌套模型数组
  3. MyBatis-学习笔记11【11.Mybatis的缓存】
  4. Spring EL运算符实例
  5. Starter Kit for ASP.NET 2.0 家族又添新丁!
  6. 转] 两种自定义表单设计方案
  7. AcWing 889. 满足条件的01序列(卡特兰数)
  8. 华为设备DHCP/DHCP中继及DHCPv6/DHCPv6中继详解
  9. 微信开通状态检测工具
  10. Windows更改鼠标滚轮方向
  11. 使用百度地图精准定位经纬度坐标的方法
  12. win7中怎么显示文件名后缀
  13. Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
  14. Nginx配置虚拟主机
  15. python matplotlib画饼形图
  16. 美国的有线电视节目提供商
  17. wannier插值能带拟合2
  18. 如何看电脑支持最大多少内存条?仅需一个命令
  19. 服务器php装什么系统,php用什么系统做服务器配置
  20. 单个JVM下支撑100w线程数vm.max_map_count

热门文章

  1. 1919 Problem A 二叉排序树
  2. windows10删除$WINDOWS.~BT文件
  3. 两台无线路由桥接教程
  4. godot 外部编辑器配置
  5. 光伏发电到底能带我们走多远?
  6. cesium 移除实体方法
  7. 【自然语言处理】【多模态】CLIP:从自然语言监督中学习可迁移视觉模型
  8. vscode遇到无法访问此网站问题的两种解决方法
  9. java 锟斤 解决乱码_java eclipse 开发中文乱码锟斤拷小锟斤拷锟
  10. python将横转为竖_【后端开发】python数据竖着怎么变横的?