java - 我的应用程序是否由于内存泄漏或隐私侵犯而退出?
问题描述
我正在开发一个简单的应用程序,它需要用户注册才能登录到应用程序。我使用 firebase 作为我的数据库。应用程序按预期加载并正确显示,但只要我输入所需的注册详细信息,而不是将数据上传到 firebase 并加载登录页面,应用程序就会崩溃。
查看 Logcat 似乎我有内存泄漏或者我违反了隐私规则,但是对此相对较新,我不完全确定我哪里出错了。
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
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.FirebaseApp;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class MainActivity extends AppCompatActivity {
private EditText userEmail, userPassword;
private Button register;
private TextView login;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupUiViews();
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (validate()){
// Upload data to the database.
String user_email = userEmail.getText().toString().trim();
String user_password = userPassword.getText().toString().trim();
firebaseAuth.createUserWithEmailAndPassword(user_email, user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
Toast.makeText(MainActivity.this, "Registration Successful!", Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, Login.class));
} else {
Toast.makeText(MainActivity.this, "Registration Failed!", Toast.LENGTH_SHORT).show();
}
}
});
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Login.class));
}
});
}
});
}
private void setupUiViews(){
userEmail = (EditText) findViewById(R.id.etEmail);
userPassword = (EditText) findViewById(R.id.etPassword);
register = (Button) findViewById(R.id.btnRegister);
login = (TextView) findViewById(R.id.tvRegistered);
}
private boolean validate(){
boolean result = false;
String email = userEmail.getText().toString();
String password = userPassword.getText().toString();
if (email.isEmpty() && password.isEmpty()){
Toast.makeText(this, "Please enter all details", Toast.LENGTH_SHORT).show();
} else {
result = true;
}
return result;
}
}
按照以下要求的 Logcat:
2020-05-28 12:56:32.695 5462-5462/com.devops.ignite E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.devops.ignite, PID: 5462
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(java.lang.String, java.lang.String)' on a null object reference
at com.shayledevops.ignite.MainActivity$1.onClick(MainActivity.java:42)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
解决方案
firebaseAuth
您在调用它之前忘记了初始化createUserWithEmailAndPassword
。
有点像L
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupUiViews();
firebaseAuth = FirebaseAuth.getInstance(); // this line is new
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (validate()){
// Upload data to the database.
String user_email = userEmail.getText().toString().trim();
String user_password = userPassword.getText().toString().trim();
firebaseAuth.createUserWithEmailAndPassword(user_email, user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
...
推荐阅读
- unity3d - 在增强现实中将 3d 对象放置在真实对象上
- hibernate - Hibernate 带宽问题:比 SQL Developer 花费更多的时间
- azure - 带有 PowerShell 5+ 的 Azure 的应用程序、创建日期、权限和 2FA 设置列表
- go - 如果我的密钥都被命名为“密钥”,如何从 BSON 获取 JSON?
- git - 列出 git 中最新编辑的文件
- javascript - 我需要在 Gatsby 插件中设置什么?
- selenium - webdriver W3C 协议是什么意思。它与 JSON 协议有何不同
- java - HTTP 响应显示 Accept=multipart/form-data 但未设置此标头并设置 CamelAcceptContentType, "application/json"
- oracle - 计数在使用条件的触发器中不起作用
- python - 如何读取文本文件的特定部分(Py 3x)