C#的Bmob使用指南(1)-数据存储
来源:互联网 发布:js车牌是什么单位 编辑:程序博客网 时间:2024/06/05 08:01
适用:初接触Bmob的新人,5分钟上手Bmob开发
1.官网的文档是使用Unity的实例,不久前有Bmob新人问我Winform项目如何使用,所以才想着写本篇教程
2.想了想,还是写成一个系列吧。目前使用过Bmob的功能有:数据存储,短信,文件服务等。但是各个功能又有一些区别,比如说短信,Bmob并没有提供C#的SDK,这时候可以选择下载其他SDK(比如JavaSDK),对其进行封装,或者使用ResetApi …. 总之路有很多种,每个人都会走出一条自己的路
切入正题
本篇只涉及数据存储部分
关于BmobSDK去官网下载即可https://www.bmob.cn/downloads
下载完毕后,发现C#的SDK是一个压缩包,解压后如下图所示,我们选择Windows文件夹下.dll
将其引入到VS的项目中(不会引用我也很绝望啊,不知道怎么给你说,百度吧少年~),我这里以Winform项目为例
因为Bmob的交互对象不需要多个实例,所以建议使用单例模式,对其进行一下简单的封装。
1.新建一个类,起名BmobManager。代码如下:
class BmobManager{ static BmobManager instance = null; BmobWindows mgr = null; private BmobManager() { mgr = new BmobWindows(); mgr.initialize("your appkery", "your restkey"); } /// <summary> /// 获取BmobManager的单例 /// </summary> /// <returns></returns> public static BmobManager GetInstance() { if (instance == null) { instance = new BmobManager(); } return instance; } public delegate void ReigsterFinished(string strResult); public delegate void LoginFinished(string strResult); public delegate void UpdateFinished(string strResult); public delegate void InsertFinished(string strResult); /// <summary> /// 注册用户 /// </summary> /// <param name="user"></param> /// <returns></returns> public void RegisterUser(BmobUser user, ReigsterFinished callBack) { string result = ""; mgr.Signup(user, (resp, exception) => { if (exception != null) { result = "error:" + exception.Message; } else { result = "success:" + resp.sessionToken; } if (callBack != null) { callBack(result); } }); } /// <summary> /// 注册用户 /// </summary> /// <param name="user"></param> /// <returns></returns> public void LoginUser(BmobUser user, LoginFinished callBack) { string result = ""; mgr.Login<BmobUser>(user.username, user.password, (resp, exception) => { if (exception != null) { result = "error:" + exception.Message; } else { result = "success:" + resp.sessionToken; } if (callBack != null) { callBack(result); } }); } /// <summary> /// 要修改用户的信息,必须获取CurrentUser,使用CurrentUser.objectId 和 CurrentUser.sessionToken验证身份 /// </summary> /// <returns></returns> public BmobUser GetCurUser() { return BmobUser.CurrentUser; } public void UpdateUser(BmobUser user, UpdateFinished callBack) { string result = ""; mgr.UpdateUser(GetCurUser().objectId, user, GetCurUser().sessionToken, (resp, exception) => { if (exception != null) { result = "保存失败, 失败原因为: " + exception.Message; } else { result = "保存成功, @" + resp.updatedAt; } if (callBack != null) { callBack(result); } }); } public void InsertScore(MyScore score, InsertFinished callBack) { string result = ""; mgr.Create("MyScore", score, (resp, exception) => { if (exception != null) { result = "保存失败, 失败原因为: " + exception.Message; } else { result = "插入分数成功"; } if (callBack != null) { callBack(result); } }); }}
这样封装之后,调用很简单,只需要 BmobManager.GetInstance().XXX方法名(参数)就可以。
public delegate void ReigsterFinished(string strResult);
在BmobManager定义了很简单的委托,全部是只有一个参数的委托(你可以定义多个参数),用来回调方法。(不知道委托的童鞋请先理解为:委托可以使得把函数当作参数传进来)
private BmobManager() { mgr = new BmobWindows(); mgr.initialize("your appkey", "your resetkey"); }
其中BmobWindows 的实例用来和Bmob进行交互,实现数据库的增删查改工作,我们在BmobManager实例化的时候对这个对象mgr进行初始化。
BmobManager的构造函数之所以声明为私有,是为了使用单例模式,避免其他地方误调用构造函数。
因此获取BmobManager对象的函数只有一种方式 :
public static BmobManager GetInstance() { if (instance == null) { instance = new BmobManager(); } return instance; }
即通过BmobManager .GetInstance()的方式。(单例模式)
public void RegisterUser(BmobUser user, ReigsterFinished callBack) { string result = ""; mgr.Signup(user, (resp, exception) => { if (exception != null) { result = "error:" + exception.Message; } else { result = "success:" + resp.sessionToken; } if (callBack != null) { callBack(result); } }); }
BmobManager中的RegisterUser(BmobUser user, ReigsterFinished callBack)方法用来注册用户,且在完成注册后,通过result字符串记录结果,并调用回调函数,返回该结果。
我们通过如下界面进行演示:
当用户输入好账号密码后,点击注册按钮,执行如下代码:
private void button1_Click(object sender, EventArgs e) { BmobUser user = new BmobUser(); user.username = textBox1.Text; user.password = textBox2.Text; BmobManager.GetInstance().RegisterUser(user, OnRegisterFinished); }
其中BmobUser需要引入命名空间cn.bmob.io,它对应了Bmob后台的User表。OnRegisterFinished函数是回调函数。代码如下:
private void OnRegisterFinished(string strResult) { MessageBox.Show(strResult); }
只是简单的通过MessageBox.Show()打印了返回的结果。
登录和修改的方法这里不做演示了。(另外需要扩展User增添字段看官方文档,写的很清楚,再介绍就多余了,而且和接下来讲的其他数据表超级类似,类比就可以理解)
接下来要介绍一下如果是想使用其他数据表怎么办?很简单
1.在Bmob后台创建数据表,添加好字段,保存。如数据表名:MyScore,字段:string playerName, string score
2.在VS中新建一个类,起名MyScore(必须与1中的数据表名称完全一致!!!)
然后代码如下:
class MyScore : BmobTable{ /// <summary> /// 玩家名称 /// </summary> public string playerName { get; set; } /// <summary> /// 游戏分数 /// </summary> public string score { get; set; } public override void readFields(BmobInput input) { base.readFields(input); //读取属性值 this.playerName = input.getString("playerName"); this.score = input.getString("score"); } public override void write(BmobOutput output, bool all) { base.write(output, all); //写到发送端 output.Put("playerName", this.playerName); output.Put("score", this.score); }}
MyScore必须继承自BmobTable类,且必须实现readFields和write方法(从文档赋值粘贴最好,不会出错)。代码很好理解,不做解释(不理解也不影响使用,比葫芦画瓢就好)。接下来看如何使用。
界面还是如图二,当登录后,输入插入的分数,点击插入按钮,则执行如下代码:
private void button3_Click(object sender, EventArgs e) { MyScore myScore = new MyScore(); myScore.playerName = BmobManager.GetInstance().GetCurUser().username; myScore.score = textBox3.Text; BmobManager.GetInstance().InsertScore(myScore, OnAddScoreFinished); } private void OnAddScoreFinished(string strResult) { MessageBox.Show(strResult); }
声明MyScore 对象,字段赋值,调用BmobManager.GetInstance().InsertScore(myScore, OnAddScoreFinished);方法执行插入操作。返回结果调用OnAddScoreFinished。
这个时候我们看Bmob后台,发现数据已经存储成功:
有问题请邮件: wff_1994@126.com 联系我,或者QQ:2062930374
Class over , 同学们再见
博客原创 转载请注明出处
- C#的Bmob使用指南(1)-数据存储
- Android-Bmob云存储数据
- Android - Bmob 读取存储数据
- 第三方服务器Bmob实现数据存储
- 利用Bmob公司的数据云存储,实现小米应用商店查看应用下载次数功能
- Bmob查询获取内部类的数据
- Android 基于第三方登录(使用Bmob后端云存储数据)实现记忆用户登录、不必重复登录
- Android Bmob--免费的网络存储的使用
- Bmob云存储、以及Chrome的 插件postman 安装
- 解决C#的本地数据加密(DLL文件存储)
- Bmob(wechatApp)--查询数据
- Android Bmob获取数据
- 【Bmob】数据查询
- 数据的存储(1)
- Bmob查询获取不到相应的数据的问题
- Bmob的一些事儿(一)
- Python3 向Bmob后台提交一条数据的范例
- 兔子-使用bmob的save()方法添加数据,出现NullPointerException
- C/C++:各种基本算法实现小结(五)—— 排序算法
- Zipper POJ
- codeforces 787A The Monster 扩展欧几里德 Java
- 侧滑返回 底部tabbar隐藏或显示
- Android事件分发机制详解
- C#的Bmob使用指南(1)-数据存储
- jboss规则引擎KIE Drools 6.3.0 Final 教程(2)
- Kubernetes中暴露外部IP地址来访问集群中的应用
- Earth Mover's Distance (EMD)距离
- HTTP请求java工具类
- 【python Flask】Flask-Bootstrap的使用
- VS中 C4819错误解决方法
- Android开发中比较常见的内存泄漏问题及解决办法
- vue从零开始