【发布时间】:2019-02-11 07:16:13
【问题描述】:
我尝试使用 firebase 身份验证服务在 android studio 3.3.1 中创建登录和注册表单。因此,我将 firebase 依赖项添加到构建 gradle 并运行应用程序,当我单击登录或注册按钮时,应用程序崩溃。
这是我的构建 gradle 代码,
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.finaldemo"
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.firebase:firebase-database:16.0.6'
implementation 'com.google.firebase:firebase-core:16.0.7'
implementation 'com.google.firebase:firebase-auth:16.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:support-v4:28.0.0'
}
这是我的登录代码,
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.finaldemo.Model.Users;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class LoginActivity extends AppCompatActivity {
private EditText Email,pswrd;
private Button Login;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Email= (EditText)findViewById(R.id.loginemail);
pswrd=(EditText) findViewById(R.id.loginpswrd);
Login=(Button)findViewById(R.id.loginbtn);
progressBar=(ProgressBar)findViewById(R.id.loginprogressbar);
Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginUser();
}
});
}
private void LoginUser(){
String email = Email.getText().toString().trim();
String pwd = pswrd.getText().toString().trim();
if (email.isEmpty()) {
Email.setError("Email Required");
Email.requestFocus();
}
else if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
Email.setError("Enter a valid Email Address");
Email.requestFocus();
}
else if (pwd.isEmpty()) {
pswrd.setError("Password Required");
pswrd.requestFocus();
}else{
progressBar.setVisibility(View.VISIBLE);
AllowAccess(email,pwd);
}
}
private void AllowAccess(final String email, final String pwd) {
final DatabaseReference Rootref;
Rootref = FirebaseDatabase.getInstance().getReference();
Rootref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.child("Users").child(email).exists()){
Users userdata = dataSnapshot.child("Users").child(email).getValue(Users.class);
if(userdata.getEmail().equals(email)){
if(userdata.getPassword().equals(pwd)){
Toast.makeText(LoginActivity.this, "Logged in Successfully", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
}else{
progressBar.setVisibility(View.GONE);
Toast.makeText(LoginActivity.this, "Account Invalid", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
这是我的注册码
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.HashMap;
import java.util.regex.Pattern;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
private EditText fname,email,pswrd,cpswrd,phone;
private static final Pattern PASSWORD_PATTERN = Pattern.compile("^" + "(?=.*[0-9])" + "(?=.*[a-z])" + "(?=.*[A-Z])" + "(?=.*[a-zA-Z])" + "(?=.*[@#$%^&+=])" + "(?=\\S+$)" + ".{8,32}" + "$");
//private FirebaseAuth mAuth;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
fname = (EditText) findViewById(R.id.regfname);
email = (EditText) findViewById(R.id.regemail);
pswrd = (EditText) findViewById(R.id.regpassword);
cpswrd =(EditText) findViewById(R.id.regcpassword);
phone = (EditText) findViewById(R.id.regphone);
progressBar = (ProgressBar) findViewById(R.id.progressbar);
findViewById(R.id.regbtn).setOnClickListener(this);
// mAuth = FirebaseAuth.getInstance();
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.regbtn:
createAccount();
break;
}
}
private void createAccount() {
String name = fname.getText().toString().trim();
String emailid = email.getText().toString().trim();
String pwd = pswrd.getText().toString().trim();
String cpwd = cpswrd.getText().toString().trim();
String phoneno = phone.getText().toString().trim();
if (name.isEmpty()) {
fname.setError("Name Required");
fname.requestFocus();
}
else if (emailid.isEmpty()) {
email.setError("Email Required");
email.requestFocus();
}
else if (!Patterns.EMAIL_ADDRESS.matcher(emailid).matches()) {
email.setError("Enter a valid Email Address");
email.requestFocus();
}
else if (pwd.isEmpty()) {
pswrd.setError("Password Required");
pswrd.requestFocus();
}
else if (!PASSWORD_PATTERN.matcher(pwd).matches()) {
pswrd.setError("Password should contain atleast 1 upper and lowercase, 1 special char,1 number and should be between 8-32 charcters");
pswrd.requestFocus();
}
else if (cpwd.isEmpty()) {
cpswrd.setError("Password Required");
cpswrd.requestFocus();
}
else if (!pwd.equals(cpwd)) {
cpswrd.setError("Password and Confirm Password did not match");
cpswrd.requestFocus();
}
else if (phoneno.isEmpty()) {
phone.setError("Phone Number is Required");
phone.requestFocus();
}
else if (phone.length() != 10) {
phone.setError("Enter Valid Phone Number");
phone.requestFocus();
}
else{
progressBar.setVisibility(View.VISIBLE);
validateUser(name,emailid,pwd,phoneno);
}
}
private void validateUser(final String name, final String emailid, final String pwd, final String phoneno) {
final DatabaseReference Rootref;
Rootref = FirebaseDatabase.getInstance().getReference();
Rootref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(!(dataSnapshot.child("Users").child(phoneno).exists() || dataSnapshot.child("Users").child(emailid).exists())){
HashMap<String, Object> Userdata = new HashMap<>();
Userdata.put("Name", name);
Userdata.put("Email", emailid);
Userdata.put("Password", pwd);
Userdata.put("Phone", phoneno);
Rootref.child("Users").child(phoneno).updateChildren(Userdata).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(RegisterActivity.this, "Congratulations, Your account has been created", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}else{
progressBar.setVisibility(View.GONE);
Toast.makeText(RegisterActivity.this,"Network Error", Toast.LENGTH_SHORT).show();
}
}
});
}else{
Toast.makeText(RegisterActivity.this, "The entered credentials are already Registered", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(RegisterActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
}
});
}
}
提前致谢。
【问题讨论】:
-
你能添加堆栈跟踪吗
-
如果您希望我们帮助您解决崩溃问题,则必须输出 Logcat。您是否在 app 模块中正确复制了 google-services.json 文件?
-
我已经通过 android studio 中的工具菜单同步了 firebase,所以它的 google-services.json 文件会被自动复制。如何上传stacktrace和logcat。
-
在 Android Studio 中,您会在底部找到
logcat选项卡。当应用程序崩溃时,您会在那里看到堆栈跟踪。复制粘贴到这里。 -
请同时添加其他 build.gradle 文件(项目)的内容。您是否还添加了
apply plugin: 'com.google.gms.google-services'作为文件的最后一行?也请回复@AlexMamo
标签: android firebase firebase-authentication