无法使用 parse.com 云功能 Android 将 Json 对象强制转换为 Float
Posted
技术标签:
【中文标题】无法使用 parse.com 云功能 Android 将 Json 对象强制转换为 Float【英文标题】:Json Object cannot be cast to Float using parse.com cloud function Android 【发布时间】:2014-10-28 12:37:49 【问题描述】:我正在按照https://parse.com/docs/cloud_code_guide?language=android#functions-calling 的教程在 android 上获取云数据。 Java Script 代码如下:
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 cannot be cast to java.lang.Float
请承认我做错了什么。我完全按照教程。 提前致谢。
【问题讨论】:
你从哪里得到这个异常。无论如何Java中的每个对象都有toString()方法,尝试使用它 @MikeMinaev 感谢您的回复。我错误地编辑了我的帖子,我写了 java.lang.String。确切的错误是 java.lang.ClassCastException: org.json.JSONObject$1 cannot be cast to java.lang.Float 在调试时它在这一行给出错误'ParseCloud.callFunctionInBackground("averageStars", params, new FunctionCallbackParseObject
但返回 NULL
值时,我遇到了一个非常相似的错误。我最终这样做是为了看看我是否有一个有效的结果:if (returnedObject.getClass() != ParseObject.class)
。不确定同样的事情是否适用于基元。
【参考方案1】:
你没有覆盖FunctionCallback<Float>();
的done方法
请像这样替换解析云函数:
ParseCloud.callFunctionInBackground("averageStars", params, new FunctionCallback<Float>()
@Override
public void done(Float ratings, ParseException e)
if (e == null)
// ratings is 4.
);
【讨论】:
【参考方案2】:我认为原因是没有评论数据。
results.length 为 0
所以 response.success(sum / results.length);
将是一个 空 JSON 对象。
我的解决方案是:检查除零异常并始终返回 String
var avg = 0;
if (results.length != 0) avg = sum / results.length
response.success(avg.toString());
【讨论】:
以上是关于无法使用 parse.com 云功能 Android 将 Json 对象强制转换为 Float的主要内容,如果未能解决你的问题,请参考以下文章
Parse.com SendGrid 云模块:无法发送标头参数对象
parse.com 云代码无法通过 mandrillapp 发送电子邮件