Baas:Backend as a Service它的主要特征是将云的某些能力封装起来,做成适合移动或web应用的功能,做成打包销售提供给用户;也就是将移动或web所需要的功能放在云上面以云软件的形式提供给使用者。
云后端服务(云存储)的优势:容易扩充、让移动开发者可以不去理会服务器性能优化和服务器代码编写
服务包括:账户的管理、消息推送、社交网络整合、异地信息服务、广告推广、应用推广
移动后端服务Baas提供商:
国外的有Stackmob、kinvey、amazon等
国内的有:bmob、avos cloud、atom
Bmob 的理念:Bmob解决了后端逻辑重复开发和维护的问题,无需后端编程和租用服务器 让移动开发更简单
使用Bmob无需再造应用后端,便能轻松拥有应用开发的各种后端能力支持,减少了开发者将应用从idea到产品(成品)的时间,我们提供了大量标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速。
Bmob官网地址:http://www.bmob.cn
Bmob账户:younghare
通过快速入门,你将学会如何使用bmob;如果你想提高使用bmob的功能可以跟技术大牛一起学习:视频教程;更详细的解释请查看Android开发文档)
第一步:Bmob创建“czg学习演示”应用
先上个图
鉴于目前Google官方推荐使用 Android Studio 进行Android项目开发,自 V3.4.2 开始,Bmob Android SDK 可以使用Gradle来进行包依赖管理,如果你使用Android Studio来进行基于BmobSDK的项目开发,建议你按照如下两个步骤进行:
一、 在Project的build.gradle文件中添加Bmob的maven仓库地址,示例如下:(注意文字说明部分):
代码如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() //Bmob的maven仓库地址,必须填写 maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" } } } task clean(type: Delete) { delete rootProject.buildDir }
二、 在app的build.gradle文件中添加compile依赖文件,示例如下:(注意文字说明部分):
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" //**bmob-sdk:3.4.6版本依赖包,用于兼容Android6.0系统** useLibrary 'org.apache.http.legacy' defaultConfig { applicationId "czg.czgbmob" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' //以下SDK开发者请根据需要自行选择 //bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk: compile 'cn.bmob.android:bmob-sdk:3.4.6' compile 'com.squareup.okhttp:okhttp:2.4.0'//自`V3.4.3版本`开始,使用`okhttp`优化SDK的网络框架 compile 'com.squareup.okio:okio:1.4.0' compile 'com.android.support:support-v4:23.2.1' //注:bmob-sdk:3.4.6需要依赖okhttp(2.4.0)、okio(2.4.0),如果需要兼容Android6.0系统,则还需要添加support-v4(23.2.1)及org.apache.http.legacy包,具体可查看下面注释[1]的解释 }
在AndroidManifest.xml中增加权限代码
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.VIBRATE" />
创建一个activity名为BmobFeedbackActivity.java
package czg.czgbmob; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; 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 BmobFeedbackActivity extends AppCompatActivity { private EditText et_username,et_feedback,et_usernameQry; private TextView tv_feedbackAll,tv_feedbackQry; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bmob_feedback); Bmob.initialize(this,"e7e000e141cac6a4c46e95117af566cc"); //appkey就是Bmob应用后台设置中的Application ID et_username= (EditText) findViewById(R.id.et_username); et_feedback= (EditText) findViewById(R.id.et_feedback); tv_feedbackAll= (TextView) findViewById(R.id.tv_feedbackAll); et_usernameQry= (EditText) findViewById(R.id.et_usernameQry); tv_feedbackQry= (TextView) findViewById(R.id.tv_feedbackQry); } public void submitOnclick(View view){ String sUsername=et_username.getText().toString(); String sFeedback=et_feedback.getText().toString(); if (sUsername.equals("") || (sFeedback.equals(""))){ Toast.makeText(BmobFeedbackActivity.this,"用户名不能为空,反馈信息不能为空",Toast.LENGTH_LONG).show(); }else { JavaBean_feeback javaBean_feeback =new JavaBean_feeback(); javaBean_feeback.setUsername(sUsername); javaBean_feeback.setFeedback(sFeedback); //调用Bmob的sdk保存数据提交给“云服务器”通过回调方法处理成功与失败的情况 javaBean_feeback.save(BmobFeedbackActivity.this, new SaveListener() { @Override public void onSuccess() { Toast.makeText(BmobFeedbackActivity.this,"反馈信息成功!",Toast.LENGTH_LONG).show(); } @Override public void onFailure(int i, String s) { Toast.makeText(BmobFeedbackActivity.this,"反馈信息失败",Toast.LENGTH_LONG).show(); } }); } } public void queryAllOnclick(View view){ BmobQueryjavaBean_feebackBmobQuerys= new BmobQuery(); javaBean_feebackBmobQuerys.findObjects(BmobFeedbackActivity. this, new FindListener() { @Override public void onSuccess(Listlist) { //遍历查询结果 tv_feedbackAll.setText("========查询结果======"); for (JavaBean_feeback javaBean_feeback:list){ tv_feedbackAll.append("\n" +"用户名:"+ javaBean_feeback.getUsername()+"反馈信息:"+javaBean_feeback.getFeedback()); } } @Override public void onError(int i, String s) { Toast.makeText(BmobFeedbackActivity.this,"查询失败",Toast.LENGTH_LONG).show(); } }); } public void queryOnclick(View view){ String sUsernameQry=et_usernameQry.getText().toString(); if (sUsernameQry.equals("")){ Toast.makeText(BmobFeedbackActivity.this,"请输入用户名",Toast.LENGTH_LONG).show(); return; } BmobQueryjavaBean_feebackBmobQuerys= new BmobQuery(); //设置查询条件,可以设置多个条件查询,类似sql语句的where条件 javaBean_feebackBmobQuerys.addWhereEqualTo("username",sUsernameQry); javaBean_feebackBmobQuerys.findObjects(BmobFeedbackActivity.this, new FindListener() { @Override public void onSuccess(Listlist) { //遍历查询结果 tv_feedbackQry.setText("========按用户名查询结果======"); for (JavaBean_feeback javaBean_feeback:list){ tv_feedbackQry.append("\n" +"用户名:"+ javaBean_feeback.getUsername()+"反馈信息:"+javaBean_feeback.getFeedback()); } } @Override public void onError(int i, String s) { Toast.makeText(BmobFeedbackActivity.this,"查询失败",Toast.LENGTH_LONG).show(); } }); } }
Activity的布局代码activity_bmob_feedback.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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".BmobFeedbackActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_username" android:hint="请输入用户名" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_feedback" android:hint="输入反馈的问题" android:lines="2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" android:id="@+id/btn_submit" android:layout_gravity="center_horizontal" android:onClick="submitOnclick" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询所有的反馈信息" android:id="@+id/btn_QueryAll" android:onClick="queryAllOnclick" android:layout_gravity="center_horizontal" /> <ScrollView android:layout_width="match_parent" android:layout_height="114dp" android:id="@+id/scrollView" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="------显示所有查询到的记录-----" android:id="@+id/tv_feedbackAll" /> ScrollView> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/et_usernameQry" android:layout_weight="1" android:hint="要查询的用户名" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询" android:id="@+id/btn_query" android:onClick="queryOnclick" android:layout_weight="1" /> LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/scrollView2" android:layout_gravity="center_horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="------显示按用户名查询的反馈记录-----" android:id="@+id/tv_feedbackQry" /> ScrollView> LinearLayout>
创建一个javaBean类javaBean_feeback.java
package czg.czgbmob; import cn.bmob.v3.BmobObject; /** * Created by Administrator on 2016/5/12. * 在使用Bmob的sdk去存储一行数据的时候,我们需要javaBean继承至BmobObject这个类 * javaBean_feeback实际上是对应数据库上的一张表,属性名就对于表中的字段名,一个javaBean_feeback对象就是对于表中的一条记录 * 当用户提交到云数据库,程序调用的时javaBean_feeback.save方法。它会自动判断后台有没有创建国与javaBean_feeback同名的表, * 如果没有则会创建对于的javaBean_feeback表。表的结构有objectid,javaBean_feeback各个属性字段,createAt date,UpdateAt date,ACL Acl字段 */ public class JavaBean_feeback extends BmobObject { private String username; private String feedback; public String getFeedback() { return feedback; } public void setFeedback(String feedback) { this.feedback = feedback; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
源码下载:https://yunpan.cn/cP7X8WsBCMm9t 访问密码 466e