首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 登入頁面跳轉失效?Intent 寫法錯誤導致無法啟動目標 Activity

     編輯:程式設計綜合問答

問題現象

輸入正確密碼點擊登入按鈕後,預期跳轉至新 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);
            }
        });
    }
}

三大錯誤與修正

1. 取值時機錯誤

locker = et.getText().toString() 放在 onCreate 時執行,使用者尚未輸入,得到空字串。修正:移至點擊事件內部。

2. Intent 寫法錯誤

new Intent("screen") 是隱式 Intent,需在 Manifest 中對應 ``,且易衝突。修正:使用顯式 Intent 指定目標類別。

3. 密碼硬編碼與明文比較

實務上不應將密碼寫死在程式碼,且需加密儲存比對。此處僅示範修正跳轉邏輯。

修正後完整代碼

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();
            }
        });
    }
}

Manifest 註冊檢查

確保目標 Activity 已在 AndroidManifest.xml 宣告:

<activity android:name=".HomeActivity" />

延伸建議

  • 使用 TextInputLayout + TextInputEditText 提升輸入體驗。
  • 密碼驗證應在後端完成,前端僅做格式檢查。
  • 加入「忘記密碼」、「註冊」入口。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved