我实际构建的是一个EditTextView,它收集一个String,当用户输入时尝试与后端进行通信,以便拉动用户" objectId&#34 ;,这是我的用户数据库中的一列。
下面显示的showProfileActivity()函数很有用,我已将其排除,因为它与问题无关。它需要用户" objectId"并显示用户的个人资料。
我想要的是" String userId",这是用户" objectId"在数据库中动态生成。我知道showProfileActivity()函数有效,因为我可以直接输入一个带有硬编码objectId的String,它会将我带到该用户的配置文件。
我的问题是,根据用户输入搜索字段的字符串,如何检索相关的" objectId"列?
findViewById(R.id.submitSearch).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText searchUserTextField = (EditText) findViewById(R.id.searchUserTextField);
// Value input to search field
final String searchInput = searchUserTextField.getText().toString();
// System.out.println(searchInput);
// Initiate ParseQuery
final ParseQuery<ParseUser> query = ParseQuery.getQuery("username");
// Look for the username that was typed into the search field
query.whereEqualTo("username", searchInput);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
// The query was successful.
// This works but clearly always loads the exact same user profile. I need this string to be loaded dynamically as a function of the user's search query.
String userId = "dj16qsXPle";
// System.out.println(userId);
showProfileActivity(userId);
} else {
// Something went wrong.
}
}
});
// Execute RemoteDataTask AsyncTask
new RemoteDataTask().execute();
}
});
}
答案 0 :(得分:1)
我不确定showProfileActivity的作用,但是因为你传递了一个userId我假设它做了另一个查询?为什么不这样做:
假设用户名是唯一的(在这种情况下,你似乎也在假设)然后findInBackground方法应该只返回一个用户。
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
// The query was successful.
if(objects.size() > 0){
ParseUser user = objects.get(0);
showProfileActivity(user);
}
} else {
// Something went wrong.
}
}
});
在showProfileActivity中,使用用户数据执行showProfileActivity所做的任何操作。
或者,如果您将objectId用于其他内容,则可以执行此操作:
ParseUser user = objects.get(0);
showProfileActivity(user.getObjectId());
这会为您提供您正在寻找的ID,而不是硬编码的ID。再次,在showProfileActivity中执行与objectId相关的任何操作。这可能意味着使用objectId等从单独的表中检索。
答案 1 :(得分:1)
最终弄明白了。我给了你答案,因为你肯定提供了正确解决方案的核心。我的错误在于启动我的ParseQuery: final ParseQuery query = ParseQuery.getQuery(&#34; username&#34;); 。它应该是 ParseQuery query = ParseUser.getQuery();
// Initiate ParseQuery
ParseQuery query = ParseUser.getQuery();
query.whereEqualTo("username", searchInput);
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
// The query was successful.
System.out.println(objects);
ParseUser user = objects.get(0);
String userId = user.getObjectId();
showProfileActivity(userId);
} else {
// Something went wrong. Look at the ParseException to see what's up.
}
}
});