作为编码练习的一部分,我正在创建Firebase注册活动,但无法成功完成登录。值得注意的是,我必须将依赖项更新为建议的版本才能构建项目,因为练习提供的依赖项无法正常工作。
Project Gradle:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'com.google.gms:google-services:4.0.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
应用gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "org.andrewedgar.theo"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:design:27.0.2'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
}
apply plugin: 'com.google.gms.google-services'
活动(createFirebaseUser方法):
public class RegisterActivity extends AppCompatActivity {
// Constants
public static final String CHAT_PREFS = "ChatPrefs";
public static final String DISPLAY_NAME_KEY = "username";
// TODO: Add member variables here:
// UI references.
private AutoCompleteTextView mEmailView;
private AutoCompleteTextView mUsernameView;
private EditText mPasswordView;
private EditText mConfirmPasswordView;
// Firebase instance variables
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
mPasswordView = (EditText) findViewById(R.id.register_password);
mConfirmPasswordView = (EditText) findViewById(R.id.register_confirm_password);
mUsernameView = (AutoCompleteTextView) findViewById(R.id.register_username);
// Keyboard sign in action
mConfirmPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.integer.register_form_finished || id == EditorInfo.IME_NULL) {
attemptRegistration();
return true;
}
return false;
}
});
// TODO: Get hold of an instance of FirebaseAuth
mAuth = FirebaseAuth.getInstance();
}
// Executed when Sign Up button is pressed.
public void signUp(View v) {
attemptRegistration();
}
private void attemptRegistration() {
// Reset errors displayed in the form.
mEmailView.setError(null);
mPasswordView.setError(null);
// Store values at the time of the login attempt.
String email = mEmailView.getText().toString();
String password = mPasswordView.getText().toString();
boolean cancel = false;
View focusView = null;
// Check for a valid password, if the user entered one.
if (TextUtils.isEmpty(password) || !isPasswordValid(password)) {
mPasswordView.setError(getString(R.string.error_invalid_password));
focusView = mPasswordView;
cancel = true;
}
// Check for a valid email address.
if (TextUtils.isEmpty(email)) {
mEmailView.setError(getString(R.string.error_field_required));
focusView = mEmailView;
cancel = true;
} else if (!isEmailValid(email)) {
mEmailView.setError(getString(R.string.error_invalid_email));
focusView = mEmailView;
cancel = true;
}
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView.requestFocus();
} else {
// TODO: Call create FirebaseUser() here
}
}
private boolean isEmailValid(String email) {
// You can add more checking logic here.
return email.contains("@");
}
private boolean isPasswordValid(String password) {
//TODO: Add own logic to check for a valid password (minimum 6 characters)
String confirmPassword = mConfirmPasswordView.getText().toString();
return confirmPassword.equals(password) && password.length() >4;
}
// TODO: Create a Firebase user
private void createFirebaseUser(){
String email = mEmailView.getText().toString();
String password = mConfirmPasswordView.getText().toString();
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("Info:", "createUser onComplete " +task.isSuccessful());
if (!task.isSuccessful()) {
Log.d("Info:", "user creation failed");
}
}
});
}