Parse.com 从云计算函数接收 JSON 数组
Parse.com receive JSON array from cloud clode function
我正在尝试从我的 Android 应用程序 运行 我的自定义云代码功能。我觉得这很奇怪,我认为平台指南中没有充分记录。
请帮助我,我在这上面浪费了太多时间!
自定义云代码函数returns对象数组,如下所示:
[
{
"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>
作为回调的通用不允许我填充适配器,它在 getItem()
方法中不断返回 java.lang.ClassCastException: java.util.HashMap cannot be cast to org.json.JSONObject
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>() {}
使我反弹,因为它需要一个数组列表! (老实说,我不明白为什么)。
那么Android那边这样的回复我该怎么办呢?为了正确解析结果,我必须做些什么吗?
提前致谢。
您好,您可以修改用云编写的 getConversations() 吗?在 response.success 中传递一个 Json 对象...这是一个工作示例,其中测试是您的 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();
}
}
});
我正在尝试从我的 Android 应用程序 运行 我的自定义云代码功能。我觉得这很奇怪,我认为平台指南中没有充分记录。
请帮助我,我在这上面浪费了太多时间!
自定义云代码函数returns对象数组,如下所示:
[
{
"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>
作为回调的通用不允许我填充适配器,它在 getItem()
方法中不断返回 java.lang.ClassCastException: java.util.HashMap cannot be cast to org.json.JSONObject
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>() {}
使我反弹,因为它需要一个数组列表! (老实说,我不明白为什么)。
那么Android那边这样的回复我该怎么办呢?为了正确解析结果,我必须做些什么吗?
提前致谢。
您好,您可以修改用云编写的 getConversations() 吗?在 response.success 中传递一个 Json 对象...这是一个工作示例,其中测试是您的 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();
}
}
});