Json Object不能使用parse.com云功能Android强制转换为Float

Json Object cannot be cast to Float using parse.com cloud function Android

本文关键字:Android 转换 Float 功能 不能 Object com parse Json      更新时间:2023-09-26

我正在学习https://parse.com/docs/cloud_code_guide?language=Android#functions-调用以获取android上的云数据。Java脚本代码如下:

Parse.Cloud.define("averageStars", function(request, response) {
  var query = new Parse.Query("Review");
  query.equalTo("movie", request.params.movie);
  query.find({
    success: function(results) {
      var sum = 0;
      for (var i = 0; i < results.length; ++i) {
        sum += results[i].get("stars");
      }
      response.success(sum / results.length);
    },
    error: function() {
      response.error("movie lookup failed");
    }
  });
});

android端的代码如下所示:

 @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Get the view from listview_main.xml
            setContentView(R.layout.listview_main);
            HashMap<String, Object> params = new HashMap<String, Object>();
            params.put("movie", "The Matrix");
            ParseCloud.callFunctionInBackground("averageStars", params, new FunctionCallback<Float>() {
              public void done(Float ratings, ParseException e) {
                   if (e == null) {
                      // ratings is 4.5
                   }
               }
            });
            // Execute RemoteDataTask AsyncTask
            new RemoteDataTask().execute();
        }

我还成功地将代码从解析控制台部署到了云中。但我得到了一个错误:java.lang.ClassCastException:org.json.JSONObject$1不能转换为java.lang.Float

请承认我做错了什么。我完全遵循了教程。提前谢谢。

您没有覆盖FunctionCallback<Float>(); 的done方法

请替换如下解析云函数:

ParseCloud.callFunctionInBackground("averageStars", params, new FunctionCallback<Float>() {
    @Override
    public void done(Float ratings, ParseException e) {
        if (e == null) {
            // ratings is 4.
        }
    }
});

我认为原因是没有Review数据
results.length为0
因此CCD_ 2将是CCD_

我的解决方案是:检查devide by zero异常并始终返回String
var avg = 0; if (results.length != 0) avg = sum / results.length response.success(avg.toString());