簡體   English   中英

將 EditText 用於在 Android Studio 中編寫的應用程序時應用程序崩潰

[英]App crash when using EditText for app written in Android Studio

嘗試從 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();

                    }

                }
            });
}

}

為什么這些語句在外面?

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

您正在嘗試在執行 onCreate 之前分配這些。 在類級別提取數據類似於在構造函數中執行此操作。 想想看……構造函數先運行,然后 onCreate 執行。

所以,你基本上是在跑步

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

不要這樣做,請將這些語句移動到登錄方法或您可能想要創建的任何其他事件方法。

您在onCreate之前聲明並初始化String emailString password ,因此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可能為空,因此您可能希望稍后獲取它們的值,或者使用TextWatcher

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM