在Android Studio中编写的应用程序使用EditText时,应用程序崩溃

时间:2019-01-22 16:58:49

标签: java android

在尝试从Android中的“ EditText”获取数据时遇到问题。 当我尝试将“ EditText”值分配给String变量(我使用toString()方法)时,应用程序立即崩溃。

问题出在onCreate方法之后的两行中。

这是我的代码:

public class MainActivity extends AppCompatActivity {

EditText em;
EditText pw;
private FirebaseAuth mAuth;

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

    EditText em = (EditText) findViewById(R.id.email1);
    EditText pw = (EditText) findViewById(R.id.password1);

    mAuth = FirebaseAuth.getInstance();
}

// When I remove those two lines the app runs normally
String email = em.getText().toString(); 
String password = pw.getText().toString();



void login(View v){
    mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        FirebaseUser user = mAuth.getCurrentUser();
                        String Logged = user.getEmail().toString();

                        Intent intent = new Intent(MainActivity.this, afterLogin.class);
                        intent.putExtra("email", Logged);
                        startActivity(intent);
                        finish();

                    } else {
                        // If sign in fails, display a message to the user.

                        Toast.makeText(MainActivity.this, "Wrong email/password.", Toast.LENGTH_SHORT).show();

                    }

                }
            });
}

}

2 个答案:

答案 0 :(得分:0)

为什么这些语句不在外面?

String email = em.getText().toString(); 
String password = pw.getText().toString();  

您正在尝试在执行onCreate之前分配它们。 在类级别提取数据类似于在构造函数中执行此操作。 考虑一下..构造函数首先运行,然后onCreate执行。

因此,您实际上正在运行

null.getText().toString(); //because em and pw were still null

请不要将这些语句移到登录方法或您可能要创建的任何其他事件方法中。

答案 1 :(得分:0)

您要在5 + 6之前声明和初始化String emailString password,因此onCreate为空。像这样将EditText初始化移动到String中:

onCreate

当然,EditText em; EditText pw; String email; String password; onCreate { EditText em = findViewById(R.id.email1); EditText pw = findViewById(R.id.password1); email = em.getText().toString; password = pw.getText().toString; } 那时可能为空,因此您可能希望稍后再获取它们的值,或使用EditText