輸入正確密碼點擊登入按鈕後,預期跳轉至新 Activity,但畫面無反應、無報錯。程式碼如下:
public class MainActivity extends Activity {
public static String lock = "vamsi";
public static String locker;
EditText et;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = findViewById(R.id.editText1);
b = findViewById(R.id.button1);
locker = et.getText().toString(); // ❌ 錯誤位置 1:過早取值,此時輸入框為空
b.setOnClickListener(v -> {
if (locker.equals(lock)) { // ❌ 錯誤位置 2:比較的是舊字串
Intent intent = new Intent("screen"); // ❌ 錯誤位置 3:隱式 Intent 寫法錯誤
startActivity(intent);
}
});
}
}
locker = et.getText().toString() 放在 onCreate 時執行,使用者尚未輸入,得到空字串。修正:移至點擊事件內部。
new Intent("screen") 是隱式 Intent,需在 Manifest 中對應 `
實務上不應將密碼寫死在程式碼,且需加密儲存比對。此處僅示範修正跳轉邏輯。
public class MainActivity extends AppCompatActivity {
private static final String CORRECT_PASSWORD = "vamsi"; // 僅示範
private EditText etPassword;
private Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etPassword = findViewById(R.id.editText1);
btnLogin = findViewById(R.id.button1);
btnLogin.setOnClickListener(v -> {
String input = etPassword.getText().toString().trim(); // 即時取值
if (CORRECT_PASSWORD.equals(input)) { // 防空指標寫法
// 顯式 Intent:指定目標 Activity 類別
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
finish(); // 可選:關閉登入頁,防止返回鍵回到登入
} else {
Toast.makeText(this, "密碼錯誤", Toast.LENGTH_SHORT).show();
}
});
}
}
確保目標 Activity 已在 AndroidManifest.xml 宣告:
<activity android:name=".HomeActivity" />
TextInputLayout + TextInputEditText 提升輸入體驗。