2017-09-30 42 views
0

嗨,我做了一个使用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而不运行(也许它调用登录屏幕但不改变按钮的视图?我真的不知道!)

+0

忘了说什么心不是工作,当我按下 “SignInlink” 按钮,它只是不动我出于某种原因去第二班。希望它现在更清晰 – user4825345

回答

2

变化这样

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

首先谢谢你的回答,但它似乎仍然不起作用,当我点击“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

+0

在您的代码中删除'android:onClick =“onClick”'。 – KeLiuyue

+0

嗨,我删除它,现在我没有得到在android显示器的错误,但仍然每当我点击它“signuplink”,应用程序只是崩溃 – user4825345