我正在为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.
我的任何表行中的两个字段都不是空的。我搜索过一个有类似问题的人,但无济于事。
有什么建议吗?
答案 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");