通过RPC的方式调用云函数确实能够避免出现上述问题,但仍然存在另一个问题.
即云函数的查询函数如果做了include关联查询,按道理查询返回的每一个AVObject也应包含pointer指向的对象的所有信息,但是在Android SDK中调用时,就会出现关联数据无法获得的现象:
例如这个python云函数,返回一个avobject组成的list,其中query查询的时候include的对象在云函数中也能正确取得:
@engine.define
def getHotArticle(**param):
limit = param['limit']
skip = param['skip']
query = Query('Article')
query.add_descending('favourCount')
query.add_descending('commentCount')
query.add_descending('createdAt')
query.greater_than_or_equal_to('favourCount', MIN_FAVOUR_COUNT)
query.limit(limit)
query.skip(skip)
query.include('community')
query.include('resident')
query.include('coverImage')
query.include('pictures')
article_list = query.find()
return article_list
,但是到了调用者获取结果时,却是空值:
Map<String,Integer> param=new HashMap<>();
param.put("limit",1000);
param.put("skip",0);
AVCloud.rpcFunctionInBackground("getHotArticle", param,
new FunctionCallback<List<AVObject>>() {
@Override
public void done(List<AVObject> object, AVException e) {
if (e==null){
Log.i(TAG, "done: size:"+object.size());
Log.i(TAG, "done: item 0: "+object.get(0).toString());
}else {
Log.e(TAG, "done: ", e);
}
}
});
结果输出:
10-18 12:32:46.299 5827-5827/net.aimoqi.********** I/DebugActivity: done: size 1
10-18 12:32:46.299 5827-5827/net.aimoqi.********** I/DebugActivity: done: item 0 { "@type":"com.avos.avoscloud.AVObject","objectId":"57d7e2f35bbb50005bd1b240","updatedAt":null,"createdAt":null,"className":"Article","serverData":{"@type":"java.util.HashMap"}}
难道python云函数返回结果的时候,只能返回单一对象(不包含关联对象)的信息吗? 如果是,那么解决这个问题的方法就得在客户端拿到List 后,再对其做一个fetchAllInBackground了,但是fetchAllInBackground这个方法同样无法指定include关联的对象,这就是我遇到的新问题.