昨天下载了Bmob官网云端逻辑的Demo,结果呢,代码不报错,客户端也没效果。好吧,我承认,不仅Demo过时了,官网介绍文档中的代码也TMD的过时了
原因在于官方Demo用的sdk版本已过时
所以我打算重新探一遍坑,Go
第1步【新建工程,导入Bmob的sdk】
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
compile 'cn.bmob.android:bmob-sdk:3.5.0'
<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" />
多的不说老司机都懂
第2步【编写云端逻辑方法】
跳至Bmob项目的云逻辑处,添加方法,这里举例起名叫test,然后确定,在编写代码的区域内,清空原有代码,粘贴以下代码
function onRequest(request, response, modules) {
//获取SDK客户端上传的name参数
var name = request.body.name;
if(name == 'bmob')
response.end('Hello,简书');
else
response.end('输入错误,请重新输入');
}
Ok,代码解释一下,参照客户端请求的参数正确与否,实现返回字符串的功能,在线调试如下
第3步【初始化Bmob,写入云端逻辑】
官网新建项目,设置里复制Appkey
初始化
Bmob.initialize(this,"你的Appkey");
创建云端逻辑对象,并处理
//创建云端逻辑对象
AsyncCustomEndpoints ace = new AsyncCustomEndpoints();
//test对应你刚刚创建的云端逻辑名称
String cloudCodeName = "test";
JSONObject params = new JSONObject();
//name是上传到云端的参数名称,值是bmob,云端逻辑可以通过调用request.body.name获取这个值
try {
params.put("name","bmob");
} catch (JSONException e) {
e.printStackTrace();
}
ace.callEndpoint(cloudCodeName, params, new CloudCodeListener() {
@Override
public void done(Object object, BmobException e) {
if (e == null) {
Toast.makeText(
BmobCloudActivity.this
,object.toString()
,Toast.LENGTH_LONG).show();
} else {
Toast.makeText(
BmobCloudActivity.this
,e.getMessage()
,Toast.LENGTH_LONG).show();
}
}
});
重点是这句
ace.callEndpoint(cloudCodeName, params, new CloudCodeListener(){});
第一个参数是云端的代码的方法名,即合云端相符的test
第二个参数是传入的参数列表,即和云端相符的name对应的bmob值
第三个参数是监听回调器,用e判断连接状况,做出响应
然后object.toString()就能得到云端response.end()中的内容
编译看看效果吧
【探坑到此结束】