0

我不熟悉Android编程,但希望制作一个应用程序,将用户数据存储在Firebase上并将其恢复。我得到认证工作,但只要我重定向到他们必须填写的细节,但它会崩溃,每当我尝试登录的形式。应用程序在开启新活动时崩溃

package example.com.myapplication; 


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.Toast; 

import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 




public class MainActivity extends AppCompatActivity { 



private Button Signup, Signin, FPbtn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final FirebaseAuth mAuth; 

    mAuth = FirebaseAuth.getInstance(); 


    Signin = (Button) findViewById(R.id.Loginbtn); 
    Signup = (Button) findViewById(R.id.signupbtn); 
    FPbtn = (Button) findViewById(R.id.FPBtn); 

    //Forgot Password 

    FPbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, ResetPassword.class)); 
     } 
    }); 

    /* //Register Method 

    Signup.setOnClickListener(new View.OnClickListener() { 


     EditText email = (EditText) findViewById(R.id.usernamefield); 
     EditText password = (EditText) findViewById(R.id.passwordfield); 
     String email3 = email.getText().toString(); 
     final String password3 = password.getText().toString(); 

     @Override 
     public void onClick(View v) { 
      if (TextUtils.isEmpty(email3)) { 
       Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      if (TextUtils.isEmpty(password3)) { 
       Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show(); 
      } else 
       { 
       startActivity(new Intent(MainActivity.this, OTP.class)); 
      } 


     } 
    }); */ 

    Signup.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, sign_up.class)); 
     } 
    }); 


    //Login Method 

    Signin.setOnClickListener(new View.OnClickListener() 


    { 
     @Override 
     public void onClick(View v) { 
      EditText email = (EditText) findViewById(R.id.usernamefield); 
      EditText password = (EditText) findViewById(R.id.passwordfield); 
      String email2 = email.getText().toString(); 
      final String password2 = password.getText().toString(); 


      if (TextUtils.isEmpty(email2)) { 
       Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      if (TextUtils.isEmpty(password2)) { 
       Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 

      mAuth.signInWithEmailAndPassword(email2, password2) 
        .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { 
         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 
          if (!task.isSuccessful()) { 
           Toast.makeText(MainActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show(); 
          } else { 
           Intent intent = new Intent(MainActivity.this, Profile.class); 
           startActivity(intent); 
           finish(); 
          } 
         } 
        }); 

     } 

    }); 
    } 
} 

然后这是我想它重定向到

package example.com.myapplication; 

import android.content.Intent; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 


import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 




public class Profile extends AppCompatActivity { 

private EditText t1,t2,t3,t4,t5; 
private Button b1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_profile); 
    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      t1 = (EditText)findViewById(R.id.FirstNameField); 
      t2 = (EditText)findViewById(R.id.LastNameField); 
      t3 = (EditText)findViewById(R.id.AgeField); 
      t4 = (EditText)findViewById(R.id.WL1); 
      t5 = (EditText)findViewById(R.id.WL2); 
      b1 = (Button)findViewById(R.id.ProfSubmit); 

      FirebaseDatabase User1 = FirebaseDatabase.getInstance(); 
      DatabaseReference Name = User1.getReference("Fname"); 
      DatabaseReference LName = User1.getReference("LName"); 
      DatabaseReference age = User1.getReference("age"); 
      DatabaseReference Work1 = User1.getReference("WorkLink1"); 
      DatabaseReference Work2 = User1.getReference("WorkLink2"); 

      Name.setValue(t1.getText()); 
      LName.setValue(t2.getText()); 
      age.setValue(t3.getText()); 
      Work1.setValue(t4.getText()); 
      Work2.setValue(t5.getText()); 

      startActivity(new Intent(Profile.this, HomeScreen.class)); 
      finish(); 
     } 
    }); 



// ... 
    } 
} 
+0

数据库具有正确的登录详细信息。我试图在意图链接其他活动,它的工作原理。我也没有得到任何Java编译错误的错误。 (不要介意MainActivity中的已识别代码块,这是不起作用的,但我很懒惰要删除它) –

+0

您能否发布日志也 –

+0

而不是通过MainActivity.this上下文启动新的活动,全局变量的上下文,在onCreate()方法中初始化它或者使该按钮的onClick函数,并把相同的代码,启动新的活动...我面临同样的问题,并通过这种方法解决 –

回答

0

替换此代码与第一个文件并添加相应的按钮的onClick方法本规范中定义的Profile.Java文件

public class MainActivity extends AppCompatActivity { 

private Button Signup, Signin, FPbtn;  
EditText email,password; 
final FirebaseAuth mAuth;  
Context cntx; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mAuth = FirebaseAuth.getInstance(); 

    email = (EditText) findViewById(R.id.usernamefield); 
    password = (EditText) findViewById(R.id.passwordfield); 

    Signin = (Button) findViewById(R.id.Loginbtn); 
    Signup = (Button) findViewById(R.id.signupbtn); 
    FPbtn = (Button) findViewById(R.id.FPBtn);       
    cntx = this; 
}   

//Declare this method as onClick method for Fpbtn 
public void FpbtnClickMethod(View view) { 
    startActivity(new Intent(cntx, ResetPassword.class)); 
} 

//Declare this method as onClick method for SignUp button 
public void SignupOnClickMethod(View view){ 
    startActivity(new Intent(cntx, sign_up.class)); 
}   

//Declare this method as onClick method for Sign In button 
public void SignInOnClickMethod(View view){ 
    String email2 = email.getText().toString(); 
    final String password2 = password.getText().toString(); 


    if (TextUtils.isEmpty(email2)) { 
     Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

    if (TextUtils.isEmpty(password2)) { 
     Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

    mAuth.signInWithEmailAndPassword(email2, password2) 
      .addOnCompleteListener(cntx, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if (!task.isSuccessful()) { 
         Toast.makeText(cntx, getString(R.string.auth_failed), Toast.LENGTH_LONG).show(); 
        } else { 
         Intent intent = new Intent(cntx, Profile.class); 
         startActivity(intent); 
         finish(); 
        } 
       } 
      }); 
} 
} 

在这里,cntx变量将解决在匿名内部类onClick上发生的上下文问题