StartActivity不起作用
嗨,我做了一个使用Firebase的登录/注册系统,出于某种原因 startActivity
只是不想工作。这里是 主要活动(LoginScreen)StartActivity不起作用
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:试图调用虚拟方法 '空隙 android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'
上的空对象引用”)
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内部,并且主类(LoginScreen)没有启动下一个活动,并且由于某种原因,它给了我“输入电子邮件”Toast,意味着它“删除了”SignIn代码如果由于某种原因进入另一个(?)但是这次应用程序没有崩溃!
更新2: 我manged地发现,调用RegisterUser()的错误,并修复它,但同样,当我点击“SignInLink”在Loginscreen同样的错误,它崩溃的应用程序是否存在同样的代码在SignIn类中,所以我再次决定从SignIn类中“删除”所有代码(只留下xml视图的类),现在当我按下SignInLink时,它只是再次调用mainclass而不运行(也许它调用登录屏幕但不改变按钮的视图?我真的不知道!)
变化这样
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"
。
我尝试这样的代码是好的。你可以尝试一下 。
EDIT2
LoginScreen
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;
}
}
}
首先谢谢你的回答,但它似乎仍然不起作用,当我点击“signuplink”时,应用程序停止工作。我得到的错误:致命异常:main java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.noam.photoupload/com.example.noam.photoupload.SignIn}:java.lang.NullPointerException:试图调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View $ OnClickListener)'null对象引用 – user4825345
在您的代码中删除'android:onClick =“onClick”'。 – KeLiuyue
嗨,我删除它,现在我没有得到在android显示器的错误,但仍然每当我点击它“signuplink”,应用程序只是崩溃 – user4825345
忘了说什么心不是工作,当我按下 “SignInlink” 按钮,它只是不动我出于某种原因去第二班。希望它现在更清晰 – user4825345