本篇来自 ithuangqing 的投稿,分享了如何使用Bmob作为服务器来配合开发出一个Android APP程序,希望大家喜欢!
ithuangqing 的博客地址:
如何轻松搭建一个服务器端,制作一款属于自己的app呢?今天我们来一起学习一下!首先我们先来看看它------Bmob。
Bmob 是一个可以开发云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便浏览终端保存的各种信息。针对移动应用开发的特性,Bmob还提供了主动推送服务,可以让移动开发者将信息从服务器直接推送到应用程序中,从而实现软件的主动更新、信息通知等服务。
对于很多Android/iOS个人移动开发者来说,开发一个具有网络功能的应用不是一件容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务器开发语言,每开发一款移动应用程序,就必须开发维护对应的服务器程序。这一切对于移动开发者来说,都是一个冗长的噩梦。
如何让移动开发者从繁琐的机械劳动中解脱出来,将更多精力投入到移动应用程序的创意研发,从而不断提升产品质量呢?Bmob移动应用云存储平台的诞生就很好地解决了以上难题。
在Bmob平台上,只需注册一个帐号,成功后申请创建任意多个数据库,获得对应的Key,下载对应版本的SDK并将其嵌入到移动应用中,便可以调用存取API,进行数据的任意操作。有了Bmob,您在5分钟内就可以学会如何开发一个云存储的移动应用软件,给应用软件快速添加一个安全灵活的后台管理系统,方便您浏览终端保存的各种信息。
是不是很心动啊,废话不多说,我们直接开始吧!
创建应用
首先你需要注册一个Bmob账号,注册成功之后页面是这样的:
你的应该是空白的,点击创建应用:
按操作进行即可,这里我们选择开发版免费的。当你创建完应用,点击所创建的应用:
你的应该只有一个数据表_User,我这里已经创建了两个数据表,我们先打开设置看一个非常重要的东西:
这个ID一定要注意,很重要,我们继续。页面右下角有一个文档,我们点开找到Android开发文档:
你可以快速浏览一下这里的快速入门,接下来我们开始导入sdk,首先说明一点我们使用Android Studio来完成开发工作,在快速入门中你会看到导入sdk的方法,我们优先选择自动导入。
自动导入
在 Project 的 build.gradle 文件中添加 Bomb 的 maven 仓库地址:
-
buildscript {
-
repositories {
-
jcenter()
-
}
-
dependencies {
-
classpath 'com.android.tools.build:gradle:1.2.3'
-
}
-
}
-
allprojects {
-
repositories {
-
jcenter()
-
//Bmob的maven仓库地址--必填
-
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
-
}
-
}
按照文档说明来即可。接着配置AndroidManifest.xml,最后一步比较重要的是就是初始化BmobSDK了。
初始化BombSDK
在你的应用程序启动的 Activity 的 onCreate方法中初始化BombSDK:
-
package com.bmob.example;
-
import cn.bmob.v3.Bmob;
-
import android.app.Activity;
-
import android.os.Bundle;
-
public class MainActivity extends Activity {
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
// TODO Auto-generated method stub
-
super.onCreate(savedInstanceState);
-
//提供以下两种方式进行初始化操作:
-
//第一:默认初始化
-
Bmob.initialize(this, "Your Application ID");
-
// 注:自v3.5.2开始,数据sdk内部缝合了统计sdk,开发者无需额外集成,传渠道参数即可,不传默认没开启数据统计功能
-
//Bmob.initialize(this, "Your Application ID","bmob");
-
//第二:自v3.4.7版本开始,设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的大小、文件的过期时间(单位为秒),
-
//BmobConfig config =new BmobConfig.Builder(this)
-
////设置appkey
-
//.setApplicationId("Your Application ID")
-
////请求超时时间(单位为秒):默认15s
-
//.setConnectTimeout(30)
-
////文件分片上传时每片的大小(单位字节),默认512*1024
-
//.setUploadBlockSize(1024*1024)
-
////文件的过期时间(单位为秒):默认1800s
-
//.setFileExpiration(2500)
-
//.build();
-
//Bmob.initialize(config);
-
}
-
}
当你初始化完成并且上述步骤都无误的情况下你就能使用bmob啦,我们来验证一下:
当你随便在一个java类文件中写上bmob的时候就会出现很多bmob的相关方法了,至此配置bmob已经全部完成,接下来开始使用bmob吧!
创建数据表
我觉得bmob的一个核心就是数据的使用,就是上传数据,读取数据,也注重说一下这点,首先我们创建一个自己需要的数据表:
-
public class FoundData extends BmobObject {
private String title;
private String describe;
private String phone;
public void setPhone(String phone) {
this.phone = phone; -
}
public void setDescribe(String describe) {
this.describe = describe; -
}
public void setTitle(String title) {
this.title = title; -
}
public String getPhone() {
return phone; -
}
public String getDescribe() {
return describe; -
}
public String getTitle() {
return title; -
}
-
}
这里我根据项目需要创建了一个FoundData数据表,我们创建数据表的时候记住要继承自Bmobject这个类,然后定义相关属性,添加set与get方法,在我们的项目中成功创建数据表之后我们需要在bmob后端控制太添加数据表与之形成对应:
选择添加表:
这里选择自定义,要注意这里的名称必须与你在项目里创建的数据表名称一模一样,添加表完成之后打开这个表:
因为你是刚创建的所以你的里面只有objectid String这一样,你需要手动添加,我们选择添加列:
注意列的名称也必须与你项目中创建的变量名称一致,包括数据类型:
完成上述操作我们就成功创建一个数据表了,接下来我们重点说一下对数据的读取,首先我们需要在数据表中添加相关数据,像这样:
记住添加数据的时候是添加行。然后我们打开开发文档:
点开开发文档:
这是关于bmob对于android开发的一系列操作,我们需要找到查询数据的方法:
找到查询指定列
这里给我们提供一个查询指定列的方法,我们看在项目中的具体使用:
-
//获取数据
-
public void getData(){
-
//获取数据
-
BmobQuery<FoundData> bmobQuery = new BmobQuery<FoundData>();
-
//不指定查找具体的哪一项则为查找全部数据
-
// bmobQuery.addQueryKeys("title");
-
bmobQuery.findObjects(new FindListener<FoundData>() {
-
@Override
-
public void done(List<FoundData> list, BmobException e) {
-
}
-
});
-
}
我们需要注意,bmob提供的是查询指定列的方法,就是它可以得到一列的数据,但是我们知道我们的数据并不是只有一列数据,如果我们想查询所有数据该怎么办呢?很简单我们将查询指定列的那段代码去掉就可以查询全部数据了,注意看我代码的注释。
我一直觉得对于查询得到的数据的处理是一个难点,当你做好了app的界面,再加入网络功能可以读取后台数据,基本上一个简单的app就成了,接下来我们就说说如何处理得到的数据:
-
//获取数据
public void getData(){ -
//获取数据
-
BmobQuery<FoundData> bmobQuery = new BmobQuery<FoundData>();
-
//不指定查找具体的哪一项则为查找全部数据
-
// bmobQuery.addQueryKeys("title");
-
bmobQuery.findObjects(new FindListener<FoundData>() {
-
@Override
-
public void done(List<FoundData> list, BmobException e) {
-
Toast.makeText(getContext(),"刷新成功"+list.size(),Toast.LENGTH_SHORT).show();
-
/**
-
* 1.list为得到的数据源
-
* 2.得到的数据有三项
-
* 2.1 title
-
* 2.2 phone
-
* 2.3 describe
-
*/
-
//处理list中的数据,for循环遍历
-
for(FoundData data : list){
-
mHashMap = new HashMap<>();
-
mHashMap.put("title",data.getTitle());
-
mHashMap.put("phone",data.getPhone());
-
mHashMap.put("describe",data.getDescribe());
-
}
-
List<Map<String,String>> mapList = new ArrayList<>();
-
mapList.add(mHashMap);
-
simpleAdapter = new SimpleAdapter(getContext(),mapList,R.layout.list_item,new String[]{"title","phone","describe"},new int[]{R.id.lf_title,R.id.lf_phone,R.id.lf_describe});
-
//数据布局填充adapter,即是绑定数据
-
listView.setAdapter(simpleAdapter);
-
simpleAdapter.notifyDataSetChanged();
-
}
-
});
-
}
我们要清楚的知道得到的数据是什么,这里是一个list集合,集合中的数据是FoundData对象,并且含有三项数据,看注释,得到的数据是要给用户看的,我们一般选在listview,处理数据的一个标准还是要看我们选择的适配器,这里我选择使用simpleAdapter,如果选择使用了simpleAdapter我们就需要一个数据源,这个数据源是一个list集合,但是集合中的每一个数据又都是一个map集合,因此我们就需要将得到的list转化成simpleAdapter需要的数据源,这里我们处理的逻辑是先使用hashmap接收得到的list,再将其转化成数据元素是map集合的list,注意看代码实现。运行过上述代码的可能会发现,上述代码的实现似乎有点问题,当我们在多添加一行数据的时候发现读取到的数据却只有一行,这是因为使用for循环遍历的时候处理不当,修改如下:
-
@Override
public void done(List<FoundData> list, BmobException e) { -
Toast.makeText(getContext(),"刷新成功"+list.size(),Toast.LENGTH_SHORT).show();
-
List<Map<String,String>> mapList = new ArrayList<>();
-
/**
-
* 1.list为得到的数据源
-
* 2.得到的数据有三项
-
* 2.1 title
-
* 2.2 phone
-
* 2.3 describe
-
*/ //处理list中的数据,for循环遍历
for(FoundData data : list){ -
mHashMap = new HashMap<>();
-
mHashMap.put("title",data.getTitle());
-
mHashMap.put("phone",data.getPhone());
-
mHashMap.put("describe",data.getDescribe());
-
mapList.add(mHashMap);
} -
}
当我们处理好以上逻辑,完成相应的界面设置我们在app上就可以看到相应的数据了:
至此大公告成,更多更详细的可以仔细阅读开发文档,bmob让你的开发更加简单快捷!