【问题标题】:Parse - Android - Will an exception be caused if no data is returned on a Parse query?Parse - Android - 如果 Parse 查询没有返回数据会导致异常吗?
【发布时间】:2015-11-19 11:39:22
【问题描述】:

一个简单的问题 - 如果未找到匹配项且查询未返回任何数据,Parse 查询是否会导致异常?

例如,我正在查询我的用户名表以查找如果用户/用户名已经存在或不存在。所以我想知道如果在用户名上没有找到匹配项,那么会返回不成功的异常查询还是返回成功的查询但对象列表中没有数据?

ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
query.whereEqualTo("username", usernameInput);
query.findInBackground(new FindCallback<ParseUser>() {

           @Override
           public void done(List<ParseUser> objects, ParseException e) {

                   //query was successful
                   if (e == null) {

                   }

                   //query was unsuccessful
                   else {
                   }
}

【问题讨论】:

  • 从语义上讲,返回值是List,除非另有说明,否则应该表示它返回 0+ 个对象。它可以返回 0 个对象或 23431 个对象,这两个结果都是有效的。找不到具有该名称的用户不是异常行为

标签: android database parse-platform


【解决方案1】:

如果你遵循ParseQuery的代码:

public Task<List<T>> findInBackground() {
  return findAsync(builder.build());
}

你最终会偶然发现this

// Converts the JSONArray that represents the results of a find command to an
// ArrayList<ParseObject>.
/* package */ <T extends ParseObject> List<T> convertFindResponse(ParseQuery.State<T> state,
      JSONObject response) throws JSONException {
    ArrayList<T> answer = new ArrayList<>();
    JSONArray results = response.getJSONArray("results");
    if (results == null) {
      PLog.d(TAG, "null results in find response");
    } else {
      String resultClassName = response.optString("className", null);
      if (resultClassName == null) {
        resultClassName = state.className();
      }
      for (int i = 0; i < results.length(); ++i) {
        JSONObject data = results.getJSONObject(i);
        T object = ParseObject.fromJSON(data, resultClassName, state.selectedKeys() == null);
        answer.add(object);

        /*
         * If there was a $relatedTo constraint on the query, then add any results to the list of
         * known objects in the relation for offline caching
         */
        ParseQuery.RelationConstraint relation =
            (ParseQuery.RelationConstraint) state.constraints().get("$relatedTo");
        if (relation != null) {
          relation.getRelation().addKnownObject(object);
        }
      }
    }

    return answer;
  }

检查以上内容 - 您可以看到成功的查询,即使它可能不包含数据,仍将返回非空的 ArrayList 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多