嗨,出于某种原因,我正在使用 firebase 做一个登录/注册系统
startActivity
只是不想工作。这里是
主要 Activity (登录屏幕)
package com.example.noam.photoupload;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class LoginScreen extends AppCompatActivity implements
View.OnClickListener {
private ProgressDialog Loading;
private FirebaseAuth mFireAuth;
private Button Registar;
private EditText Email;
private EditText Passowrd;
private Button Signin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_screen);
Loading= new ProgressDialog(this);
Registar=(Button) findViewById(R.id.Register);
Email=(EditText)findViewById(R.id.EditEmail);
Passowrd=(EditText)findViewById(R.id.EditPassword);
Signin=(Button)findViewById(R.id.SignInlink);
Registar.setOnClickListener(this);
Signin.setOnClickListener(this);
mFireAuth= FirebaseAuth.getInstance();
if(mFireAuth.getCurrentUser() !=null){
finish();
startActivity(new Intent(getApplicationContext(),ProfileActive.class));
}
}
private void RegistarUser(){
String email=Email.getText().toString().trim();
String password=Passowrd.getText().toString().trim();
if(TextUtils.isEmpty(email)){
//email is empty
Toast.makeText(this,"Please enter email",Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(password)){
//Passowrd is empty
Toast.makeText(this,"Please enter Password",Toast.LENGTH_SHORT).show();
return;
}
Loading.setMessage("Reguistering user...");
Loading.show();
mFireAuth.createUserWithEmailAndPassword(email,password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Loading.dismiss();
if(task.isSuccessful()){
//user is Registerd ,and login
//add my start to the next screen
finish();
startActivity(new Intent(getApplicationContext(),ProfileActive.class));
}
else{
Toast.makeText(LoginScreen.this,"failed",Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onClick(View view) {
if(view ==Registar){
RegistarUser();
}
if(view == Signin){
//LoginInActivity
finish();
Intent i = new Intent(LoginScreen.this, SignIn.class);
startActivity(i);
}
}
主类 XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<Button
android:layout_margin="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Register"
android:text="Register User"/>
<Button
android:layout_margin="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Already Registered? Sign in here"
android:id="@+id/SignInlink"
android:gravity="center"/>
</LinearLayout>
</RelativeLayout>
这是第二个类(重要的是,由于某种原因它也给了我一个错误:
"java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
on a null object reference" )
package com.example.noam.photoupload;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class SignIn extends AppCompatActivity implements
View.OnClickListener {
private ProgressDialog Loading;
private FirebaseAuth mFireAuth;
private Button Login;
private EditText Email;
private EditText Passoword;
private TextView SignUp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);Loading= new ProgressDialog(this);
setContentView(R.layout.activity_login_screen);
Login=(Button) findViewById(R.id.login);
Email=(EditText)findViewById(R.id.EditEmail);
Passoword=(EditText)findViewById(R.id.EditPassword);
SignUp=(TextView)findViewById(R.id.Signuplink);
mFireAuth= FirebaseAuth.getInstance();
Login.setOnClickListener(this);
SignUp.setOnClickListener(this);
;
}
private void UserLogin(){
String email=Email.getText().toString().trim();
String password=Passoword.getText().toString().trim();
if(TextUtils.isEmpty(email)){
//email is empty
Toast.makeText(this,"Please enter email",Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(password)){
//Passowrd is empty
Toast.makeText(this,"Please enter Password",Toast.LENGTH_SHORT).show();
return;
}
Loading.setMessage("Reguistering user...");
Loading.show();
mFireAuth.signInWithEmailAndPassword(email,password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Loading.dismiss();
if(task.isSuccessful()){
//user is Registerd ,and login
//add my start to the next screen
finish();
startActivity(new Intent(getApplicationContext(),ProfileActive.class));
}
else{
Toast.makeText(SignIn.this,"failed",Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onClick(View view) {
if(view ==Login){
UserLogin();
}
if(view == SignUp){
//LoginInActivity
finish();
startActivity(new Intent(this,LoginScreen.class));
}
}
二级 XML
<Button
android:layout_margin="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/login"
android:text="Login"/>
<TextView
android:layout_margin="15dp"
android:onClick="onClick"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Don't have an account yet ? Signup here "
android:id="@+id/Signuplink"
android:gravity="center"/>
(尝试建议的解决方案后): 更新1: 我“删除”了 SignIn 代码,以检查问题是否出在 SignIn 内部,但主类(LoginScreen)仍然没有启动下一个 Activity ,而且由于某种原因,它给了我“输入电子邮件”Toast,这意味着它进入了另一个如果由于某种原因(?)但这次应用程序没有崩溃!
更新 2: 我设法找到调用 RegisterUser() 的错误,并修复了它,但同样,每当我在登录屏幕中单击“SignInLink”时,都会出现相同的错误,如果 SignIn 类中存在相同的代码,它会使应用程序崩溃,所以我再次决定从 SignIn 类中“删除”所有代码(只留下 xml View 的类),现在当我按下 SignInLink 时,它只是再次调用主类而不起作用(也许它调用登录屏幕,但不会更改按钮的 View ?我真的不知道!)
最佳答案
像这样更改所有代码
finish();
startActivity(new Intent(getApplicationContext(),ProfileActive.class));
到
startActivity(new Intent(getApplicationContext(),ProfileActive.class));
finish();
并在 LoginScreen
类中更改为
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.Register:
RegistarUser();
break;
case R.id.SignInlink:
Intent i = new Intent(LoginScreen.this, SignIn.class);
startActivity(i);
finish();
break;
}
}
并在SignIn
类中进行更改
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.login:
UserLogin();
break;
case R.id.Signuplink:
startActivity(new Intent(this,LoginScreen.class));
finish();
break;
}
}
编辑
<TextView
android:layout_margin="15dp"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Don't have an account yet ? Signup here "
android:id="@+id/Signuplink"
android:gravity="center"/>
只需删除代码中的 android:onClick="onClick"
即可。
我尝试这样的代码是可以的。你可以尝试一下。
编辑2
登录屏幕
public class LoginScreen extends AppCompatActivity implements
View.OnClickListener {
private ProgressDialog Loading;
// private FirebaseAuth mFireAuth;
private Button Registar;
private EditText Email;
private EditText Passowrd;
private Button Signin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_screen);
Loading = new ProgressDialog(this);
Registar = (Button) findViewById(R.id.Register);
// Email=(EditText)findViewById(R.id.EditEmail);
// Passowrd=(EditText)findViewById(R.id.EditPassword);
Signin = (Button) findViewById(R.id.SignInlink);
Registar.setOnClickListener(this);
Signin.setOnClickListener(this);
}
private void RegistarUser() {
// String email = Email.getText().toString().trim();
// String password = Passowrd.getText().toString().trim();
if (TextUtils.isEmpty("email")) {
//email is empty
Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty("password")) {
//Passowrd is empty
Toast.makeText(this, "Please enter Password", Toast.LENGTH_SHORT).show();
return;
}
Loading.setMessage("Reguistering user...");
Loading.show();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.Register:
RegistarUser();
break;
case R.id.SignInlink:
Intent i = new Intent(LoginScreen.this, SignIn.class);
startActivity(i);
finish();
break;
}
}
}
登录
public class SignIn extends AppCompatActivity implements
View.OnClickListener {
private ProgressDialog Loading;
private Button Login;
private EditText Email;
private EditText Passoword;
private TextView SignUp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Loading = new ProgressDialog(this);
setContentView(R.layout.activity_sign_in);
Login = (Button) findViewById(R.id.login);
// Email=(EditText)findViewById(R.id.EditEmail);
// Passoword=(EditText)findViewById(R.id.EditPassword);
SignUp = (TextView) findViewById(R.id.Signuplink);
Login.setOnClickListener(this);
SignUp.setOnClickListener(this);
;
}
private void UserLogin() {
// String email = Email.getText().toString().trim();
// String password = Passoword.getText().toString().trim();
if (TextUtils.isEmpty("email")) {
//email is empty
Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty("password")) {
//Passowrd is empty
Toast.makeText(this, "Please enter Password", Toast.LENGTH_SHORT).show();
return;
}
Loading.setMessage("Reguistering user...");
Loading.show();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.login:
UserLogin();
break;
case R.id.Signuplink:
startActivity(new Intent(this, LoginScreen.class));
finish();
break;
}
}
}
关于java - 启动 Activity 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498657/