android – 使用移动后端启动程序从数据存储区发送和撤回数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – 使用移动后端启动程序从数据存储区发送和撤回数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4301字,纯文字阅读大概需要7分钟。
内容图文
![android – 使用移动后端启动程序从数据存储区发送和撤回数据](/upload/InfoBanner/zyjiaocheng/723/da31e6e840ed488ba6ea7a0e4ee3d5ab.jpg)
我正在尝试在我的Android应用程序中使用Mobile Backend Starter.为此,我需要在数据存储区中存储一些数据.
我正在使用提供的对象CloudEntity,但我只能一致地插入和读取String.
这是我用来发送数据的示例代码:
CloudEntity entity = new CloudEntity(TEST_KIND_NAME);
entity.put(KEY_DATE, new Date(System.currentTimeMillis()));
entity.put(KEY_CALENDAR, Calendar.getInstance());
entity.put(KEY_LONG, Long.valueOf(Long.MAX_VALUE));
entity.put(KEY_INTEGER, Integer.valueOf(Integer.MAX_VALUE));
getCloudBackend().insert(entity, simpleHandler);
这就是我读回数据的方式(下一个代码放在CloudBackendHandler的onComplete中:
StringBuffer strBuff = new StringBuffer();
strBuff.append("Inserted: \n");
strBuff.append("\tId = " + result.getId() + "\n");
Object o;
o = result.get(KEY_DATE);
strBuff.append("\tDate was retrieved as : " + ((o == null)? "null" : o.getClass().getName()) + "\n");
o = result.get(KEY_CALENDAR);
strBuff.append("\tCalendar was retrieved as : " + ((o == null)? "null" : o.getClass().getName()) + "\n");
o = result.get(KEY_LONG);
strBuff.append("\tLong was retrieved as : " + ((o == null)? "null" : o.getClass().getName()) + "\n");
o = result.get(KEY_INTEGER);
strBuff.append("\tInteger was retrieved as : " + ((o == null)? "null" : o.getClass().getName()) + "\n");
o = result.get(KEY_BOOLEAN);
strBuff.append("\tBoolean was retrieved as : " + ((o == null)? "null" : o.getClass().getName()) + "\n");
mTvInfo.setText(strBuff);
我得到的结果是:
作为日期和日历插入的数据返回null.
作为Integer插入的数据返回BigDecimal.
数据作为Longreturns插入一个字符串.
我的问题是:我可以发送(并回读)除字符串以外的其他数据吗?如果是这样.怎么样?
解决方法:
经过一段时间的Android手机支持入门试验,我找到了一个链接到“一种”(非常有限的)文档:Mobile Backend Starter.
我发现如果你发送一个Integer(如果我信任de文档的Float或Double),它将作为数字字段存储在DataStore中.当您发送查询时(通过ClouldQuery),它将作为BigDecimal返回.
但是,如果您在CloudEntity中将Long作为属性传递,它将作为String存储在DataStore中并返回.这并非易事,因为String字段对允许的比较有限制.
如果发送DateTime,文档会告诉您将返回一个String,但不要告诉您它也将作为String存储在DataStore中.
这很重要,因为您无法与字符串进行所有比较.它只允许相等(和ne)比较(您不能在查询中测试大于过滤器的String属性).因此,您不能将时间戳存储为Long(将转换为String并且您将无法比较它们),并且由于相同的原因,您无法将时间戳设置为DateTime.而你无法存储Date或Calendar对象.
无论如何,每个CloudEntity默认具有两个DateTime属性CloudEntity.PROP_CREATED_AT和CloudEntity.PROP_UPDATED_AT.您可以使用此字段设置查询过滤器.为此,您需要将过滤器设置为
CloudQuery myQuery = new CloudQuery(<your kind name>);
myQuery.set<things>...
DateTime dateTime = new DateTime(<the time you want>);
myQuery.setFilter(F.gt(CloudEntity.PROP_UPDATED_AT, dateTime));
您需要使用DateTime进行比较.如果你很勇敢,你不能使用Date而不是DateTime来进行这种比较.你会收到这个错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code": 400,
"errors": [
{
"domain": "global",
"message": "java.lang.IllegalArgumentException: _updatedAt:java.util.LinkedHashMap is not a supported property type.",
"reason": "badRequest"
}
],
"message": "java.lang.IllegalArgumentException: _updatedAt: java.util.LinkedHashMap is not a supported property type."
...
其他奇怪的是,显然,你不能与dateTime = new DateTime(0)(即1970-01-01T01:00:00.000 01:00)进行比较,因为后端接收查询为:
query: (_kindName:"Data") AND ( _updatedAt > "1970-01-01T01:00:00.000+01:00" ), schema: {_kindName=STRING, _updatedAt=STRING}
不会给出任何错误,但不返回任何列表:result:null.看起来它将比较视为String.如果您使用DateTime dateTime = new DateTime(1),您将发送一个查询:
list: executing query: {filterDto={operator=GT, values=[_updatedAt, 1970-01-01T01:00:00.001+01:00]},
看起来和以前一样,但后端将执行查询:
query: (_kindName:"Data") AND ( _updatedAt > 1 ), schema: {_kindName=STRING, _updatedAt=DOUBLE}
正如我看到DOUBLE我尝试提交Double而不是DateTime,但它不起作用(没有错误但没有结果).
但是,好消息的每个人!我们可以用Integer进行比较:
Integer anInteger = Integer.valueOf(0);
myQuery.setFilter(F.gt(CloudEntity.PROP_UPDATED_AT, anInteger));
后端看到:
query: (_kindName:"Data") AND ( _updatedAt > 0 ), schema: {_kindName=STRING, _updatedAt=INT32}
我们将获得预期值(所有实体自1970-01-01T01:00:00.000 01:00更新)
对不起我的错误(我的英语不好)我希望这可以帮助别人,至少可以节省他一些时间.
内容总结
以上是互联网集市为您收集整理的android – 使用移动后端启动程序从数据存储区发送和撤回数据全部内容,希望文章能够帮你解决android – 使用移动后端启动程序从数据存储区发送和撤回数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。