我正在尝试从包含ParseUser的列表中创建列表视图。 我的搜索类返回:List Parse SDK 1.12不再支持ParseQueryAdapter,配置文件适配器功能不支持ParseUser。
我尝试从_User
解析类中查询ParseObjects,但它不会返回对象。
所以我在circels工作,如果我试图在ParseObject中获取用户信息,我就不知道了。如果我使用ParseUser我无法创建ListView。有人知道解决它的方法吗?
我已经检查了这个问题。
ParseUser Username Adapter in Android ListView doesn't show Data
和
How to fetch the list of users from ParseUser table and show the it in list view in andorid
但它不适用于指定的用户列表。
这是我的代码。
爪哇:
public class MainActivity extends ActionBarActivity {
Search search;
EditText mCityField;
List<ParseUser> mAccountList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ParseAnalytics.trackAppOpenedInBackground(getIntent());
mCityField = (EditText)findViewById(R.id.mCityField);
}
public void searchCity(View v){
if(mCityField.getText().toString().length()!=0){
mAccountList = search.searchUsers(mCityField.getText().toString());
Log.i("main", "succesfully searched yo mamma");
} else{
Toast.makeText(MainActivity.this, "You did not enter a city!", Toast.LENGTH_SHORT).show();
}
}
这是我的搜索类:
public class Search {
List<ParseUser> locals = null;
public List<ParseUser> searchUsers(String city){
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("City", city);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> userList, ParseException e) {
if (e == null) {
Log.i("main", "inside if loop" + userList);
for (ParseUser user : userList) {
Log.i("main", "inside for loop");
String username = user.getString("username");
Log.i("main", "username " + username);
}
locals = userList;
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
return locals;
}
}
适配器CLass:
public class ProfileAdapter extends ParseQueryAdapter<ParseObject> {
public ProfileAdapter(Context context, QueryFactory<ParseObject> queryFactory) {
super(context, queryFactory);
}
@Override
public View getItemView(final ParseUser user, View v, ViewGroup parent) {
// build your views
}
}
答案 0 :(得分:0)
这里的问题是您使用的是异步方法query.findInBackground
只有在异步调用返回后才会调用done
方法。在此之前,您的locals
列表将保持为空,并且当您在同步方法中立即返回时,您只需从searchUsers
方法返回一个空列表。
在done
块中调用方法,创建一个新的ProfileAdapter
并将其设置为ListView的适配器,甚至更好,在视图为的时用适配器初始化ListView创建并添加一个方法来更新适配器上的数据集,然后在适配器上调用notifyDatasetChanged
,然后将结果添加到ListView。
类似的东西:
public class ProfileAdapter extends ParseQueryAdapter<ParseObject> {
private List<ParseUser> mUserList;
public ProfileAdapter(Context context, QueryFactory<ParseObject> queryFactory) {
super(context, queryFactory);
}
@Override
public View getItemView(final ParseUser user, View v, ViewGroup parent) {
// build your views
}
public void setData(List<ParseUser> userList) {
mUserList = userList;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mUserList.size();
}
通过setData
回调方法在适配器上调用此done
方法。这将在适配器中设置返回的数据,并通知它有新数据要显示。另请记住将适配器设置为Activity中ListView的适配器。