通过解析在我的Android应用程序中检索与我的手机联系人列表匹配的用户列表

通过解析在我的Android应用程序中检索与我的手机联系人列表匹配的用户列表,android,parse-platform,chat,Android,Parse Platform,Chat,我正在使用Parse开发一个Android聊天信息应用程序,在我成功完成的注册过程中保存用户的电话号码、用户名和密码。现在,我想获取已保存在电话联系人列表下的用户列表,该列表与他们的电话号码相匹配,并在列表视图中显示用户。我一直在写解析查询,并在列表视图中显示获取的用户 编辑: 我正在尝试使用下面的代码,但还不清楚 ParseUser user1 = ParseUser.getCurrentUser(); ParseQuery<ParseUser> parseQuery = user

我正在使用Parse开发一个Android聊天信息应用程序,在我成功完成的注册过程中保存用户的电话号码、用户名和密码。现在,我想获取已保存在电话联系人列表下的用户列表,该列表与他们的电话号码相匹配,并在列表视图中显示用户。我一直在写解析查询,并在列表视图中显示获取的用户

编辑: 我正在尝试使用下面的代码,但还不清楚

ParseUser user1 = ParseUser.getCurrentUser();
ParseQuery<ParseUser> parseQuery = user1.getQuery();
parseQuery.whereEqualTo("PhoneNumber", some_ph_no_from_my_contact);
parseQuery.findInBackground(new FindCallback<ParseUser>() {

    @Override
    public void done(List<ParseUser> numberList, ParseException e) {
        // TODO Auto-generated method stub

        if(e == null){
            for (int i = 0; i < numberList.size(); i++) 
            {
                // What to do here?
            }
        }
        else{
            Log.d("userId", "Error: " + e.getMessage());
        }
    }
});
ParseUser user1=ParseUser.getCurrentUser();
ParseQuery ParseQuery=user1.getQuery();
parseQuery.whereEqualTo(“电话号码”,来自我的联系人的一些电话号码);
findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表编号列表,e){
//TODO自动生成的方法存根
如果(e==null){
对于(int i=0;i

请提供帮助。

您可以使用
查询:

public void getFriends(List<String> numbers) {
    List<ParseQuery<ParseUser>> queries = new ArrayList<ParseQuery<ParseUser>>();
    for (String number : numbers) {
        ParseQuery<ParseUser> parseQuery = ParseUser.getQuery();
        parseQuery.whereEqualTo("PhoneNumber", number);
        queries.add(parseQuery);
    }

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

    userQuery.findInBackground(new FindCallback<ParseUser>() {

        @Override
        public void done(List<ParseUser> numberList, ParseException e) {
            if (e == null) {
                for (int i = 0; i < numberList.size(); i++) {
                    // What to do here?

                    //Use this list of ParseUser (numberList) in an ArrayAdapter
                    //or save it in a database
                }
            }
        }
    });
}
public void getFriends(列表编号){
列表查询=新建ArrayList();
用于(字符串编号:数字){
ParseQuery ParseQuery=ParseUser.getQuery();
parseQuery.whereEqualTo(“电话号码”,数字);
添加(parseQuery);
}
ParseQuery userQuery=ParseQuery.or(查询);
findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表编号列表,e){
如果(e==null){
对于(int i=0;i
列表号码
将是用户通讯簿中的电话号码列表


一旦你有了
列表
只需将它输入到
阵列适配器
或将其保存在本地数据库中,你的选择(我会选择数据库)。

或查询有限制。如果数字列表长度超过10个元素,则会抛出太多的$or子句。所以你需要稍微修改一下David的代码。例如,如果您的数字列表中有80个元素,代码如下所示

public void getFriends(List<String> numbers) {

    for (int i = 0; i < 80; i += 10) {

        List<ParseQuery<ParseUser>> queries = new ArrayList<>();
        for (int j = i; j < i + 10; j++) {
            ParseQuery<ParseUser> parseQuery = ParseUser.getQuery();
            parseQuery.whereEqualTo("PhoneNumber", numbers.get(j));
            queries.add(parseQuery);
        }

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

        userQuery.findInBackground(new FindCallback<ParseUser>() {

            @Override
            public void done(List<ParseUser> numberList, ParseException e) {

                if (e == null) {
                    for (int i = 0; i < numberList.size(); i++) {
                        // What to do here?

                        Log.e(TAG, numberList.get(i).getUsername());
                    }
                } else {
                    Log.e(TAG, e.getMessage());
                }
            }
        });

    }
}
public void getFriends(列表编号){
对于(int i=0;i<80;i+=10){
列表查询=新建ArrayList();
对于(int j=i;j
请显示一些代码,让我们帮助您。我已根据建议编辑了我的查询。希望能有帮助。谢谢,非常感谢。我正在尝试这个。作为参考,是否有任何选项可以对整个电话号码列表只调用一次getQuery(),或者我需要对循环中的每个电话号码调用getQuery(),如本答案所示?您必须为每个号码添加一个新的查询,因此我认为getQuery()是必要的。您可以尝试使用ParseQuery baseQuery=ParseUser.getQuery();在for循环外部,然后在其内部使用ParseQuery ParseQuery=baseQuery;但我不确定它是否会起作用。