Json Object нельзя использовать для Float, используя функцию parse.com для облаков Android

Я следую руководству https://parse.com/docs/cloudguide?language=Android#functions-calling, чтобы получить данные облака на 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();
 }
</float></string,></string,>

Я также успешно развернул код из консоли разбора в облако. Но я получаю сообщение об ошибке: java.lang.ClassCastException: org.json.JSONObject $ 1 не может быть добавлено в java.lang.Float

Пожалуйста, признал меня, где я делаю неправильно. Я отлично слежу за учебником. Заранее спасибо.

2 ответа

Вы не переопределяете сделанный метод FunctionCallback<float>();</float>

Пожалуйста, замените функцию облака синтаксического разбора следующим образом:

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


Я думаю, причина в том, что нет данных обзора. 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());

licensed under cc by-sa 3.0 with attribution.