我制作了一个应用程序,用户可以在其中登录并将文本发布到我的 Parse 数据库。所有帖子都保存在 Posts 类中的文本列中,此类中的另一列是 user,它是指向我的 User 类的指针,它有一个名为 username 的列,它是我想要检索的用户名字符串。
我已经设法查询数据库并检索文本列中的所有数据,将其全部放入字符串数组,然后放入我的应用程序的 ListView 中。
我想要实现的目标接下来是通过查看帖子中的相关用户名列来检索文本列中的所有帖子和发布每个帖子的用户的姓名。
我可以在一个查询中完成所有这些操作还是应该创建另一个查询要做到这一点?
解析类:
用户
|对象 ID(字符串)|用户名(字符串)|密码(字符串)|
帖子
|对象 ID(字符串)|文本(字符串)|用户(指针<_User>)|
用户将启动应用程序,注册一个用户名和密码,这会在包含他们的用户名和密码的用户类中添加一行。然后,用户将发布一个帖子,该帖子将向 Posts 类添加一行,其中包含文本和一个指向在用户列中发布帖子的用户的指针。
查询和ListView代码:
//create new ArrayList and ArrayAdapter
final ArrayList<String> postList = new ArrayList<String>();
final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, R.layout.listview_row, postList);
//create new ParseQuery selecting all data within 'text' in descending order
ParseQuery<ParseObject> query = ParseQuery.getQuery("Posts");
query.selectKeys(Arrays.asList("text"));
query.addDescendingOrder("text");
//query
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> text, ParseException e) {
if (e == null) {
//query successful
int listSize = text.size();
//loop through each post in 'text'
for(int i = 0; i < listSize; i++){
//add each post to textArray
textArray[i] = text.get(i).getString("text");
}
//add all data in textArray to ListView
postList.addAll(Arrays.asList(textArray));
lvText.setAdapter(listAdapter);
}
else {
//query error
Toast.makeText(MainActivity.this, "query error: " + e, Toast.LENGTH_LONG).show();
}
}
});
最佳答案
这很简单,你可以使用 .include在现有查询中“在每个 [您正在查询的类] 中包含 [您要包含的类] 数据”,您可以调用我认为如下的查询对象:
ParseQuery<ParseObject> query = ParseQuery.getQuery("Posts");
query.selectKeys(Arrays.asList("text"));
query.addDescendingOrder("text");
query.include([field containing user reference]);
ParseObject parseUser = text.get(i).getParseObject(([field containing user reference]);
希望对您有所帮助!
更新
“我忘了提到我在 Posts 类中的‘user’列是一个指针,指向我的 User 类中用户的 objectID。在 User 类中是用户名列,这是我想反馈给我的应用程序的信息。
ParseQuery<ParseObject> query = ParseQuery.getQuery("Posts");
query.selectKeys(Arrays.asList("text"));
query.addDescendingOrder("text");
query.include("user");
String parseUserName = text.get(i).getParseObject(("user").getString("userName");
这可能是行不通的,错误提示您必须刷新对象才能获取数据。但首先试试这个,看看它是否有效,我知道一些其他技巧:
ParseQuery<ParseObject> query = ParseQuery.getQuery("Posts");
query.selectKeys(Arrays.asList("text"));
query.addDescendingOrder("text");
query.include("user");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> text, ParseException e) {
if (e == null) {
ParseQuery<ParseUser> query = ParseQuery.getQuery("_User");
query.whereEqualTo("objectId", text.get(0).getParseObject(""));
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> users, ParseException e) {
if (e == null) {
String parseUserName = users.get(0).getString("userName");
}
});
int listSize = text.size();
//loop through each post in 'text'
for(int i = 0; i < listSize; i++){
关于Android - 解析查询以获取所有帖子和用户与帖子一起去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095887/