如何从特定列表<parseuser>创建ListView?

时间:2016-01-14 17:46:52

标签: android parse-platform android-listview

我正在尝试从包含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
    }
}

1 个答案:

答案 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的适配器。