android - Parse.com 从云 clode 函数接收 JSON 数组

标签 android json arraylist parse-platform parse-cloud-code

我正在尝试从我的 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.JSONObjectgetItem()方法

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 s 并且不应该关心 map 等。 还尝试使用 new FunctionCallback<JSONArray>() {}反弹我回来,因为它需要一个数组列表! (老实说,我不明白为什么)。

那么Android端这样的响应应该怎么处理呢?为了正确解析结果,我必须做些什么吗?

提前致谢。

最佳答案

您好,您可以修改用云编写的 getConversations() 吗?在响应中传递一个 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 - Parse.com 从云 clode 函数接收 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32847632/

相关文章:

android - 使用 android.app.ServiceConnectionLeaked 在模拟器中获取 android 安装错误

java - 基于数组列表 d 对数组列表 a、b、c 进行排序

java - 如何修复 list.contains(object) 不返回好的 boolean 变量

c++ - 使用 Boost JSON 解析器的 JSON 格式化错误

javascript - 为列表 Google map 中的每个纬度、经度创建一个标记

jquery - TypeScript 回调没有在其签名中完全实例化类

java - 如何通过匹配内部数组中的值来对 arraylist 中的数组进行分组?

android - 从 Android 麦克风获取分贝

java - JVM/Android 不信任 StartSSL 的根证书

android - android应用如何向sdcard服务