2017-09-30 41 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