解析Android getUsername()“ParseObject没有此密钥的数据”

时间:2015-02-18 23:43:40

标签: android parse-platform

我正在为Android制作社交应用,我正在使用Parse来处理服务器端的事情。

我正在制作帖子列表,我必须获得帖子作者的用户名。我有一个指向我的Post类中的_User类的指针,我得到了给定帖子的作者。但是,当我尝试获取该用户的用户名时,出现问题。

这是当前的代码:

parseQueryAdapter = new ParseQueryAdapter<HoodPost>(getActivity(), HoodPost.class) {
        @Override
        public View getItemView(HoodPost post, View view, ViewGroup parent) {
            if (view == null) {
                view = View.inflate(getContext(), R.layout.hood_post_item, null);
            }
            TextView postTextView = (TextView) view.findViewById(R.id.text_view);
            TextView authorView = (TextView) view.findViewById(R.id.author_view);
            ParseUser author = post.getAuthor();
            postTextView.setText(post.getText());
            authorView.setText(author.getUsername());
            return view;
        }
}

我也尝试过:

author.getString("name");

(这也是我的_User表中的一个字段)

author.getString("username");

它抛出的错误是:

java.lang.IllegalStateException: ParseObject has no data for this key.  Call fetchIfNeeded() to get the data.

我的任何表行中的两个字段都不是空的。我搜索过一个有类似问题的人,但无济于事。

有什么建议吗?

3 个答案:

答案 0 :(得分:6)

我实际上在这个问题中找到了答案here

那里没有提到的是你必须用try-catch包围它,如下:

String name = "";
try {
    name = author.fetchIfNeeded().getString("name");

} catch (ParseException e) {
    Log.v(LOG_TAG, e.toString());
    e.printStackTrace();
   }

答案 1 :(得分:1)

@Yasen Petrov是正确的,你需要使用fetchIfNeeded()作为例外说明。这背后的原因是,在Parse(在您的情况下是您的作者和帖子)这样的关系中,相关对象不会被自动提取。因此,如果您首先以Yasen详细信息的形式获取作者,那么它将起作用。

对Author.java代码的替代更改:

try {
    name = fetchIfNeeded().getString("name");
} catch (ParseException e) {
    Log.e(TAG, "Something has gone terribly wrong with Parse", e);
}

答案 2 :(得分:0)

您可以使用include

ParseQuery<Survey> query = ParseQuery.getQuery("Post");
query.include("Post.User.Author");