简体   繁体   English

尝试使用解析查询的结果填充ListView

[英]Trying to populate a ListView with results from a Parse query

I've got a simple app where users sign up and sign in, and I want them to be able to search for other users. 我有一个简单的应用程序,用户可以登录并登录,我希望他们能够搜索其他用户。

I'm using parse.com to store my users and their details, and have been looking into a way to search for users (using either names, phone numbers, emails, etc) and show them all in a list view, but i've come up empty. 我正在使用parse.com来存储我的用户及其详细信息,并且一直在寻找一种搜索用户的方法(使用姓名,电话号码,电子邮件等),并将其全部显示在列表视图中,但是我我空了。 Most answers and tutorials involve using ParseQueryAdapter, but it looks like that class is no longer included in the SDK. 大多数答案和教程都涉及使用ParseQueryAdapter,但看起来该类不再包含在SDK中。

Does anyone have any experience with this? 有人对这个有经验么?

Thanks for your time 谢谢你的时间

EDIT: I've been messing around with ParseQuery, to try and get something. 编辑:我一直在搞弄ParseQuery,试图得到一些东西。 This is what I have so far: 这是我到目前为止的内容:

 searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                ParseQuery<ParseUser> query = ParseUser.getQuery();
                //TODO search function

                query.whereContains("name", searchText.getText().toString().trim());
                query.findInBackground(new FindCallback<ParseUser>() {
                    @Override
                    public void done(List<ParseUser> objects, ParseException e) {
                        if (e == null) {
                            Log.d("Brand", "Retrieved " + objects.size() + " Brands");
                            for (ParseObject dealsObject : objects)
                            {
                                Log.i("USERNAME", dealsObject.getString("name"));
                                // use dealsObject.get('columnName') to access the properties of the Deals object.
                            }
                        } else {
                            Log.d("Brand", "Error: " + e.getMessage());
                        }
                    }
                });


            }
        });

This code outputs the number of results from the search as well as the "name" attribute for each test results to the log. 该代码将搜索结果的数量以及每个测试结果的“名称”属性输出到日志。

Additionally, I've already made a layout for each item in the list view, containing name, email, phone number and such details. 此外,我已经为列表视图中的每个项目进行了布局,其中包含名称,电子邮件,电话号码和此类详细信息。 Earlier, before I started using Parse, I was using a local MySQL database to store my users. 之前,在开始使用Parse之前,我正在使用本地MySQL数据库来存储用户。 I would then search for the user, which returned a JsonArray, and I would put each attribute into a custom "searchresult" object which had get() and set() methods for search attributes. 然后,我将搜索返回JsonArray的用户,并将每个属性放入自定义的“ searchresult”对象中,该对象具有用于搜索属性的get()和set()方法。 After that I had an ArrayAdapter which I added the results to. 之后,我有了一个ArrayAdapter,将结果添加到其中。 This method was kind of inefficient, especially since I'm not an expert in PHP and Json. 这种方法效率低下,特别是因为我不是PHP和Json的专家。

you can try like this 你可以这样尝试

query.whereContains("name", searchText.getText().toString().trim());
query.whereContains("phone", searchText.getText().toString().trim());
query.whereContains("emails", searchText.getText().toString().trim());

Found a way to do this. 找到了一种方法。 First, the search for any user matching any fields: 首先,搜索与任何字段匹配的任何用户:

String searchParams = searchText.getText().toString().trim();

                if(!searchParams.isEmpty()) {
                    final ArrayList<SearchResults> searchResults = new ArrayList<SearchResults>();
                    listAdapter = new ListAdapter(activityContext, searchResults);
                    listView.setAdapter(listAdapter);

                    ParseQuery<ParseUser> queryName = ParseUser.getQuery();
                    queryName.whereContains("name", searchParams);
                    ParseQuery<ParseUser> queryPhone = ParseUser.getQuery();
                    queryPhone.whereContains("username", searchParams);
                    ParseQuery<ParseUser> queryEmail = ParseUser.getQuery();
                    queryEmail.whereContains("email", searchParams);
                    ParseQuery<ParseUser> querySurname1 = ParseUser.getQuery();
                    querySurname1.whereContains("surname1", searchParams);
                    ParseQuery<ParseUser> querySurname2 = ParseUser.getQuery();
                    querySurname2.whereContains("surname2", searchParams);

                    List<ParseQuery<ParseUser>> queries = new ArrayList<ParseQuery<ParseUser>>();
                    queries.add(queryName);
                    queries.add(queryPhone);
                    queries.add(queryEmail);
                    queries.add(querySurname1);
                    queries.add(querySurname2);

                    ParseQuery<ParseUser> mainQuery = ParseQuery.or(queries);

                    mainQuery.findInBackground(new FindCallback<ParseUser>() {
                        @Override
                        public void done(List<ParseUser> objects, ParseException e) {
                            if (e == null)
                            {
                                Log.d("Brand", "Retrieved " + objects.size() + " Brands");
                                for (ParseObject dealsObject : objects) {
                                    Log.i("USERNAME", dealsObject.getString("name"));
                                    Log.i("PRIVATE", Integer.toString(dealsObject.getInt("private")));
                                    SearchResults sr1 = new SearchResults();
                                    sr1.setName(dealsObject.getString("name"));
                                    sr1.setSurname1(dealsObject.getString("surname1"));
                                    sr1.setSurname2(dealsObject.getString("surname2"));
                                    sr1.setUid(dealsObject.getObjectId());
                                    Log.d("UID",dealsObject.getObjectId());

                                    if(dealsObject.getInt("private") == 0)
                                    {
                                        sr1.setEmail(dealsObject.getString("email"));
                                        sr1.setPhone(dealsObject.getString("username"));
                                    }
                                    else
                                    {
                                        sr1.setPhone("xxx-xxx-xxx");
                                        sr1.setEmail("xxxxxx@xxxxx.xxx");
                                    }

                                    searchResults.add(sr1);
                                }
                            } else {
                                Log.d("Brand", "Error: " + e.getMessage());
                            }

                            listAdapter.notifyDataSetChanged();

And my SearchResults class: 还有我的SearchResults类:

public class SearchResults
{
    private String name = "";
    private String surname1 = "";
    private String surname2 = "";
    private String phone = "";
    private String email = "";
    private Bitmap image;
    private String uid = "";

    public String getEmail() {
        return email;
    }

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Bitmap getImage() {
        return image;
    }

    public void setImage(Bitmap image) {
        this.image = image;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getSurname1() {
        return surname1;
    }

    public String getSurname2() {
        return surname2;
    }

    public void setSurname1(String surname1) {
        this.surname1 = surname1;
    }

    public void setSurname2(String surname2) {
        this.surname2 = surname2;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM