我试图从我的Android应用程序运行自定义云代码功能。我觉得这很奇怪,我认为平台指南中没有充分记录。
请帮助我,我在这方面花了太多时间!
自定义云代码函数返回一个如下所示的对象数组:
[
{
"status":false,
"usr":{
"URL":"a string",
"__type":"Object",
"blacklisted":false,
"className":"_User",
"createdAt":"2015-09-28T08:22:09.266Z",
"description":"a string",
"email":"a string",
"emailVerified":true,
"facebookId":"a string",
"first_name":"a string",
"gender":"male",
"last_name":"a string",
"name":"Filippo",
"objectId":"a string",
"updatedAt":"2015-09-28T12:58:31.455Z",
"username":"a string"
}
}
// Some other objects...
]
现在我试图用Android客户端调用云代码函数:
final HashMap<String, ParseObject> params = new HashMap<String, ParseObject>();
ParseCloud.callFunctionInBackground("getConversations", params, new FunctionCallback<ArrayList<JSONObject>>() {
@Override
public void done(final ArrayList<JSONObject> results, ParseException e) {
myAdapter = new InboxAdapter(getActivity(), results);
listview.setAdapter(myAdapter);
}
}
但是我得到了一些奇怪的行为,因为使用ArrayList<JSONObject>
作为回调的通用符号不会允许我填充适配器,这会在java.lang.ClassCastException: java.util.HashMap cannot be cast to org.json.JSONObject
方法中不断返回getItem()
private ArrayList<JSONObject> list;
private Context ctx;
public InboxAdapter(Context c, ArrayList<JSONObject> s) {
ctx = c;
list = s;
}
/* All other methods */
@Override
public JSONObject getItem(int position) {
return list.get(position); // Gives exception!
}
我觉得这很奇怪,因为它是JSONObject
的一个ArrayList,不应该关心地图等等。
还试图使用new FunctionCallback<JSONArray>() {}
反弹,因为它需要一个arraylist! (说实话,我没有弄明白为什么)。
那么我该怎么办才能处理来自Android端的响应?为了正确解析结果,我有什么必须做的吗?
提前致谢。
答案 0 :(得分:4)
你可以修改你在云中编写的getConversations()..在response.success中传递一个Json对象......这是一个工作示例,其中test是你的getConversations()函数: -
Parse.Cloud.define("test", function(request, response) {
var text = "hello world";
var jsonObject = {
"answer": text
};
response.success(jsonObject);
});
然后调用它并从android获取值,如下所示: -
ParseCloud.callFunctionInBackground("test", null, new FunctionCallback< Map<String, Object> >() {
public void done(Map<String, Object> mapObject, ParseException e) {
if (e == null){
Toast.makeText(appContext, mapObject.get("answer").toString(), Toast.LENGTH_LONG).show();
}
}
});