java - 启动 Activity 不起作用

标签 java android xml firebase oncreate

嗨,出于某种原因,我正在使用 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/

相关文章:

java - Android:随机播放变量和多个 setText

android - 减小图像大小而不损失其在android中的质量

c# - 如何以编程方式将 XML 数据导入到 Excel 文件中?

android - (支持)MapFragment 生命周期调用

Android Studio 操作栏颜色未更改

r - 使用 R 中的 Xpath 根据另一个属性及其父属性获取节点的属性

java - 更改 ActionListener 以 append StringBuilder

java - 格式化 double 到 6 位小数精度

java - 领英 API。如何获得一个弹出窗口,要求用户单击“允许”并自动获取代码,而不是在 Linkedin 中复制和粘贴

java - 我如何追踪我的 Activity 完成的原因?