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

时间:2015-06-14 08:49:23

标签: android email parse-platform username

我试图使用解析来创建一个Android应用程序,允许用户使用他们的用户名或电子邮件登录。我已经尝试查询获取带有提供的电子邮件地址的对象,然后获取该对象的用户名以进行登录。但是,我收到了这个错误:

  

' getFirstInBackground(com.parse.GetCallback)'在' com.parse.ParseQuery'不能应用于'(匿名com.parse.GetCallback" com.parse.ParseObject>)'

我是app dev和parse的新手,所以我不完全确定这意味着什么。根据我的理解,它不会让我使用getFirstInBackground,因为它适用于parseUser,而且我正在使用ParseObjects,但我使用的代码是从之前的stackoverflow问题中提取的,这是一个有效的回答:Login username AND email in Parse Android

这是我的代码:

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

4 个答案:

答案 0 :(得分:1)

根据docs,该方法的签名如下:

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

这意味着GetCallback的通用类型必须与ParseQuery中的通用类型相同。所以它应该是

query.getFirstInBackground(new GetCallback<ParseUser>()) { /* ... */ }

答案 1 :(得分:0)

您正在尝试使用ParseUser类型GetCallBack查询ParseObject

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

答案 2 :(得分:0)

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

希望这有帮助

答案 3 :(得分:0)

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