我试图使用解析来创建一个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);
}
}
});
}
}
});
答案 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");
}
}
});
}