【问题标题】:StartActivity not working开始活动不工作
【发布时间】:2017-09-30 01:16:46
【问题描述】:

您好,出于某种原因,我正在使用 firebase 进行登录/注册系统 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: 我“删除”了登录代码以检查问题是否在登录内部,但主类(LoginScreen)仍然没有开始下一个活动,而且由于某种原因它给了我“输入电子邮件”吐司,意思是它进入了另一个如果出于某种原因(?)但应用程序这次没有崩溃!

更新 2: 我设法找到了调用 RegisterUser() 的错误并修复了它,但同样,每当我在登录屏幕中单击“SignInLink”时,同样的错误,如果 SignIn 类中有相同的代码,它会使应用程序崩溃,所以我再次决定从 SignIn 类“删除”所有代码(只留下 xml 视图的类),现在当我按下 SignInLink 时,它只是再次调用主类而没有功能(也许它调用登录屏幕但不改变按钮的视图?我真的不知道!)

【问题讨论】:

  • 忘了说什么不起作用,当我按下“SignInlink”按钮时,出于某种原因,它只是不会让我进入二等舱。希望现在更清楚

标签: java android xml firebase oncreate


【解决方案1】:

像这样更改所有代码

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;
    }
}

并更改SignInclass

@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;
    }
}
}

【讨论】:

  • 首先感谢您的回答,但似乎仍然无法正常工作,当我单击“注册链接”时,应用程序停止工作。我得到的错误: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.noam.photoupload/com.example.noam.photoupload.SignIn}: java.lang.NullPointerException: 尝试调用空对象引用上的虚拟方法 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
  • 嗨,我删除了它,现在我在 android 监视器中没有收到错误,但每当我点击它“signuplink”时,应用程序就会崩溃
  • 显示您的详细日志信息
  • 09-30 14:31:16.001 1154-1338/com.example.noam.photoupload I/FA:未找到跟踪代码管理器,因此不会使用 09-30 14:31:16.001 1154-1338/com.example.noam.photoupload D/FA:记录事件 (FE):_e,Bundle[{_o=auto,_et=13938,_sc=LoginScreen,_si=-4347483831692551899}] 09-30 14:31 :19.471 2378-2378/? I/[SC]ConnectionJobService: scheduleJob : false 09-30 14:31:19.481 2378-2378/? I/[SC]ConnectionJobService:注册连接接收器 09-30 14:31:19.621 2378-2411/? I/[SC]ConnectionJobService:CONNECTION_CHANGE_RECEIVER
  • 你应该告诉我RuntimeException 是日志。你可以复制到这里。
猜你喜欢
  • 2010-11-23
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多