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

时间:2015-10-26 16:15:02

标签: java android listview search parse-platform

我有一个简单的应用程序,用户注册并登录,我希望他们能够搜索其他用户。

我正在使用parse.com存储我的用户及其详细信息,并且一直在寻找一种搜索用户的方式(使用姓名,电话号码,电子邮件等)并在列表视图中显示所有内容,但我空洞了。大多数答案和教程都涉及使用ParseQueryAdapter,但看起来该类不再包含在SDK中。

有没有人有这方面的经验?

感谢您的时间

编辑:我一直在搞乱ParseQuery,试图获得一些东西。这就是我到目前为止所做的:

 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());
                        }
                    }
                });


            }
        });

此代码将搜索结果的数量以及每个测试结果的“name”属性输出到日志。

此外,我已经为列表视图中的每个项目制作了一个布局,其中包含姓名,电子邮件,电话号码和此类详细信息。早些时候,在我开始使用Parse之前,我使用的是本地MySQL数据库来存储我的用户。然后我会搜索返回JsonArray的用户,并将每个属性放入一个自定义的“searchresult”对象中,该对象具有搜索属性的get()和set()方法。之后,我有一个ArrayAdapter,我将结果添加到。这种方法效率低下,特别是因为我不是PHP和Json的专家。

2 个答案:

答案 0 :(得分:0)

你可以这样尝试

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

答案 1 :(得分:0)

找到了一种方法。首先,搜索匹配任何字段的任何用户:

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();

我的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;
    }
}