我的LoginActivity
包含EditText
,用户可以输入他们的电子邮件和密码。所有代码对我来说都没问题。
但是,单击登录按钮后,用户无法登录。事实证明,该电子邮件无效,其中EditText
电子邮件包含以下内容:
android.support.v7.widget.AppCompatEditText{b014ce3 VFED..CL. .F...... 56,646-1384,804 #7f0d0096 app:id/etEmailLogin}
请帮我找出错误。
package com.example.loyalfine.myponda.app;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class LoginActivity extends AppCompatActivity {
private static final String TAG = "LoginActivity";
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseAuth mAuth;
private EditText etEmailLogin;
private EditText etPasswordLogin;
private Button bLogin;
private Button bSwitchToRegister;
private Button bResetPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
Toast.makeText(LoginActivity.this, (findViewById(R.id.etEmailLogin)).toString().trim(), Toast.LENGTH_LONG).show();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
Toast.makeText(LoginActivity.this, "onAuthStateChanged:signed_in:", Toast.LENGTH_LONG).show();
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
Toast.makeText(LoginActivity.this, "onAuthStateChanged:signed_out:", Toast.LENGTH_LONG).show();
}
}
};
etEmailLogin = (EditText) findViewById(R.id.etEmailLogin);
etPasswordLogin = (EditText) findViewById(R.id.etPasswordLogin);
bLogin = (Button) findViewById(R.id.bLogin);
bLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
signIn();
}
});
bSwitchToRegister = (Button) findViewById(R.id.bSwitchToRegister);
bSwitchToRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent in = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(in);
}
});
bResetPassword = (Button) findViewById(R.id.bResetPassword);
bResetPassword.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//TODO: com.firebase.ui.auth.ui.email.ConfirmRecoverPasswordActivity
}
});
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
public void signIn() {
final String passwordl = etPasswordLogin.toString().trim();
final String emaill = etEmailLogin.toString().trim();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Toast.makeText(LoginActivity.this, user.getEmail()+"; "+ (findViewById(R.id.etEmailLogin)).toString().trim(), Toast.LENGTH_LONG).show();
Log.d(TAG, emaill);
mAuth.signInWithEmailAndPassword(emaill, passwordl);
Intent in = new Intent(LoginActivity.this, WelcomeActivity.class);
startActivity(in);
};
}
我的LoginActivity
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.loyalfine.myponda.app.LoginActivity"
android:orientation="vertical"
android:gravity="center_vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter your Email"
android:id="@+id/etEmailLogin"
android:inputType="textEmailAddress" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/etPasswordLogin"
android:ems="10"
android:hint="Enter your password"
android:inputType="textPassword"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Login"
android:id="@+id/bLogin"
android:layout_gravity="center_horizontal"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Not registered yet? Click here for redistration!"
android:id="@+id/bSwitchToRegister"
android:layout_gravity="center_horizontal"
android:clickable="true"
android:background="#0000"
android:textColor="#0a68ec"
android:textSize="12dp"
android:foreground="#0000" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Forget password? Click here to reset your password!"
android:id="@+id/bResetPassword"
android:layout_gravity="center_horizontal"
android:onClick="onClick"
android:textColor="#ed7a41"
android:textSize="10dp"
android:background="#0000" />
</LinearLayout>
以下消息:
09-11 03:00:24.280 32751-32751/com.example.loyalfine.myponda.app W/ViewRootImpl[WelcomeActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=205.09277, y[0]=2066.7188, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=20468343, downTime=20463897, deviceId=0, source=0x1002 }
09-11 03:00:24.521 32751-32751/com.example.loyalfine.myponda.app D/LoginActivity: android.support.v7.widget.AppCompatEditText{b014ce3 VFED..CL. .F...... 56,646-1384,804 #7f0d0096 app:id/etEmailLogin}
09-11 03:00:24.567 32751-398/com.example.loyalfine.myponda.app W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
两个Toasts都显示相同的内容:
android.support.v7.widget.AppCompatEditText{b014ce3 VFED..CL. .F...... 56,646-1384,804 #7f0d0096 app:id/etEmailLogin}
另外,请让我知道为什么会出现这种情况:
Local module descriptor class for com.google.firebase.auth not found.
谢谢你的善意。
更新:
添加getText()
和onCompleteListener
后,消息会显示:
09-11 07:36:28.969 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[LoginActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=157.06055, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37033032, downTime=36201038, deviceId=0, source=0x1002 }
09-11 07:36:28.969 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[LoginActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=157.06055, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37033032, downTime=36201038, deviceId=0, source=0x1002 }
09-11 07:36:28.969 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[LoginActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=157.06055, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37033032, downTime=36201038, deviceId=0, source=0x1002 }
09-11 07:36:28.969 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[LoginActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=157.06055, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37033032, downTime=36201038, deviceId=0, source=0x1002 }
09-11 07:36:31.559 30405-30416/com.example.loyalfine.myponda.app I/art: Background sticky concurrent mark sweep GC freed 12136(1617KB) AllocSpace objects, 54(1220KB) LOS objects, 24% free, 9MB/12MB, paused 6.324ms total 111.816ms
09-11 07:36:31.770 30405-30405/com.example.loyalfine.myponda.app D/***LoginActivity: onAuthStateChanged:signed_in:8cG1dBsCFlNDAWiQHXAN4NSaulN2***
09-11 07:36:36.797 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[WelcomeActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=153.06152, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37040855, downTime=37035146, deviceId=0, source=0x1002 }
09-11 07:36:36.797 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[WelcomeActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=153.06152, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37040855, downTime=37035146, deviceId=0, source=0x1002 }
09-11 07:36:36.797 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[WelcomeActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=153.06152, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37040855, downTime=37035146, deviceId=0, source=0x1002 }
09-11 07:36:36.797 30405-30405/com.example.loyalfine.myponda.app W/ViewRootImpl[WelcomeActivity]: Cancelling event due to no window focus: MotionEvent { action=ACTION_CANCEL, actionButton=0, id[0]=0, x[0]=153.06152, y[0]=2073.6719, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=37040855, downTime=37035146, deviceId=0, source=0x1002 }
09-11 07:36:42.688 30405-30405/com.example.loyalfine.myponda.app W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
09-11 07:36:45.336 30405-30405/com.example.loyalfine.myponda.app W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
09-11 07:36:45.966 30405-30405/com.example.loyalfine.myponda.app D/LoginActivity: ***android.support.v7.widget.AppCompatEditText{2ad64b4 VFED..CL. ........ 56,646-1384,804 #7f0d0096 app:id/etEmailLogin}***
09-11 07:36:45.983 30405-30444/com.example.loyalfine.myponda.app W/DynamiteModule: Local module descriptor class for ***com.google.firebase.auth not found.***
09-11 07:36:45.983 30405-30444/com.example.loyalfine.myponda.app W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
09-11 07:36:56.234 30405-30444/com.example.loyalfine.myponda.app W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
答案 0 :(得分:1)
首先,确保Firebase控制台中的所有内容都很好(帐户都在那里等等)
目前似乎没有任何代码可以处理登录失败的情况。我刚刚在我的应用中使用Firebase实现了登录,因此这是我在用户按下登录按钮时使用的代码。 (注意:我刚刚注意到一个错误,在返回语句之前按钮没有设置为可单击,但除此之外一切都很好)
// authenticates user, and starts main activity if successful
@OnClick(R.id.login_button)
public void login(View view) {
// prevents the user launching the main activity multiple times if their login is valid
loginButton.setClickable(false);
String email = null;
String pass = null;
// prevents null entries for email
if (usernameInput.getText().length() != 0) {
email = usernameInput.getText().toString();
} else {
Toast.makeText(LoginScreen.this, "Please enter your email",
Toast.LENGTH_SHORT).show();
return;
}
// prevents null entries for pass
if (passwordInput.getText().length() != 0) {
pass = passwordInput.getText().toString();
} else {
Toast.makeText(LoginScreen.this, "Please enter your password",
Toast.LENGTH_SHORT).show();
return;
}
// signs in with the entered email and pass
AuthManager.firebaseAuth.signInWithEmailAndPassword(email,pass)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// sign in success
Log.v(TAG, "signIn:onComplete:" + task.isSuccessful());
// if sign in is successful, pass auth info to global variables, and launch intent and start the main activity
if (task.isSuccessful()){
AuthManager.user = AuthManager.firebaseAuth.getCurrentUser();
AuthManager.userUID = AuthManager.user.getUid();
AuthManager.loggedIn = true;
// creates the DB manager to make initial and future DB calls
new DBManager();
Toast.makeText(LoginScreen.this, "Signed in",
Toast.LENGTH_SHORT).show();
startMainActivity();
} else {
// if sign in fails
Log.w(TAG, "signIn", task.getException());
Toast.makeText(LoginScreen.this, "Incorrect username or password",
Toast.LENGTH_SHORT).show();
// makes the button clickable again
loginButton.setClickable(true);
}
}
});
}
我在我的实现中也使用了一个自定义的AuthManager类,但是你设置FirebaseAuth对象的方式完全没问题。
答案 1 :(得分:0)
返回的异常代码ERROR_INVALID_EMAIL
表示您作为电子邮件地址传递给signInWithEmailAndPassword()
的字符串不具有有效电子邮件地址的格式。
检查logcat
输出,查看Log.d(TAG, emaill)
的记录内容。如果您认为有效地址,请发布值。
<强>更新强>
问题在于这些陈述:
final String passwordl = etPasswordLogin.toString().trim();
final String emaill = etEmailLogin.toString().trim();
你想要这样的东西:
final String passwordl = etPasswordLogin.getText().toString().trim();
final String emaill = etEmailLogin.getText().toString().trim();
更新2:
完成建议的更正后,您的signin()
方法应如下所示:
public void signIn() {
final String passwordl = etPasswordLogin.getText().toString().trim(); //NOTE addition of getText()
final String emaill = etEmailLogin.getText().toString().trim(); //NOTE addition of getText()
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Toast.makeText(LoginActivity.this, user.getEmail()+"; "+ (findViewById(R.id.etEmailLogin)).toString().trim(), Toast.LENGTH_LONG).show();
Log.d(TAG, emaill);
mAuth.signInWithEmailAndPassword(emaill, passwordl);
Intent in = new Intent(LoginActivity.this, WelcomeActivity.class);
startActivity(in);
};
Log.d(TAG, emaill)
的输出应该是您输入的有效电子邮件地址,例如myName@domainName
。如果日志输出不是您输入的电子邮件地址,请发布记录的值并重新发布signin()
的代码。