Android解析使用电子邮件或用户名登录

Android解析使用电子邮件或用户名登录,android,email,parse-platform,Android,Email,Parse Platform,我正在尝试使用parse制作一个android应用程序,允许用户使用用户名或电子邮件登录。我试着查询一个具有提供的电子邮件地址的对象,然后获取该对象的用户名进行登录。但是,我遇到了以下错误: “com.parse.ParseQuery”中的“getFirstInBackgroundcom.parse.GetCallback”不能应用于“anonymous com.parse.GetCallback com.parse.ParseObject>” 我是应用程序开发和解析新手,所以我不完全确定这意味

我正在尝试使用parse制作一个android应用程序,允许用户使用用户名或电子邮件登录。我试着查询一个具有提供的电子邮件地址的对象,然后获取该对象的用户名进行登录。但是,我遇到了以下错误:

“com.parse.ParseQuery”中的“getFirstInBackgroundcom.parse.GetCallback”不能应用于“anonymous com.parse.GetCallback com.parse.ParseObject>”

我是应用程序开发和解析新手,所以我不完全确定这意味着什么。据我所知,它不允许我使用getFirstInBackground,因为它适用于parseUser,我正在使用ParseObjects,但我使用的代码来自前面的stackoverflow问题,这是一个有效的答案:

这是我的密码:

            // Do this to allow for username or email log in
        if (mEmail.indexOf("@") != -1) {
            ParseQuery<ParseUser> query = ParseUser.getQuery();
            query.whereEqualTo("email", mEmail);
            query.getFirstInBackground(new GetCallback<ParseObject>() {
                public void done(ParseObject object, ParseException e) {
                    if (object == null) {
                        Log.d("score", "The getFirst request failed.");
                    } else {

                        String actualUsername = object.getString("username");
                        ParseUser.logInInBackground(actualUsername, mPassword, new LogInCallback() {
                            @Override
                            public void done(ParseUser parseUser, ParseException e) {
                                if (e != null) {
                                    // TODO: Show error message
                                    Toast.makeText(LoginActivity.this, "Credentials incorrect", Toast.LENGTH_LONG).show();
                                } else {
                                    // Start Intent for activity
                                    // TODO: Choose activity
                                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                    startActivity(intent);
                                }
                            }
                        });
                    }
                }
            });
根据,该方法的签名如下:

class com.parse.ParseQuery<T> {
    public void getFirstInBackground(GetCallback<T> callback)
}

您正试图使用ParseObject类型的GetCallBack查询ParseUser

在代码中用ParseUser替换ParseObject的所有实例

query.getFirstInBackground(new GetCallback<ParseUser>() {
                    public void done(ParseUser user, ParseException e) {
                        if (object == null) {
                            Log.d("score", "The getFirst request failed.");
                        } else {

                            String actualUsername = user.getUsername();
                            ParseUser.logInInBackground(actualUsername, mPassword, new LogInCallback() {
                                @Override
                                public void done(ParseUser parseUser, ParseException e) {
                                    if (e != null) {
                                        // TODO: Show error message
                                        Toast.makeText(LoginActivity.this, "Credentials incorrect", Toast.LENGTH_LONG).show();
                                    } else {
                                        // Start Intent for activity
                                        // TODO: Choose activity
                                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                        startActivity(intent);
                                    }
                                }
                            });
                        }
                    }
                });
希望这有帮助

final String userOrEmal = editTextEmailOrUserName.getText().toString().trim();
final String mpassword = editTextPassword.getText().toString().trim();

            if (userOrEmal.contains("@")) {

                ParseQuery<ParseUser> query = ParseUser.getQuery();
                query.whereEqualTo("email", userOrEmal);
                query.getFirstInBackground(new GetCallback<ParseUser>() {
                    @Override
                    public void done(ParseUser object, ParseException e) {
                        if (object != null) {

                            ParseUser.logInInBackground(object.getString("username"), mpassword, new LogInCallback() {
                                public void done(ParseUser user, ParseException e) {
                                    if (user != null) {

                                        Log.v("login", "secessful");
                                    } else {

                                        Log.v("login", "fail");
                                    }
                                }
                            });
                        } else {

                        }


                    }
                });



            } else {
                ParseUser.logInInBackground(userOrEmal,mpassword, new LogInCallback() {
                    public void done(ParseUser user, ParseException e) {
                        if (user != null) {

                            Log.v("login", "secessful");
                        } else {

                            Log.v("login", "fail");
                        }
                    }
                });
            }
final String userOrEmal = editTextEmailOrUserName.getText().toString().trim();
final String mpassword = editTextPassword.getText().toString().trim();

            if (userOrEmal.contains("@")) {

                ParseQuery<ParseUser> query = ParseUser.getQuery();
                query.whereEqualTo("email", userOrEmal);
                query.getFirstInBackground(new GetCallback<ParseUser>() {
                    @Override
                    public void done(ParseUser object, ParseException e) {
                        if (object != null) {

                            ParseUser.logInInBackground(object.getString("username"), mpassword, new LogInCallback() {
                                public void done(ParseUser user, ParseException e) {
                                    if (user != null) {

                                        Log.v("login", "secessful");
                                    } else {

                                        Log.v("login", "fail");
                                    }
                                }
                            });
                        } else {

                        }


                    }
                });



            } else {
                ParseUser.logInInBackground(userOrEmal,mpassword, new LogInCallback() {
                    public void done(ParseUser user, ParseException e) {
                        if (user != null) {

                            Log.v("login", "secessful");
                        } else {

                            Log.v("login", "fail");
                        }
                    }
                });
            }