Activity 實作 OnClickListener,onClick(View v) 中用 switch(v.getId()) 判斷,但點擊後 App 崩潰(NullPointerException 或 ClassCastException)。
Button btn = (Button) v; 強轉失敗:若佈局中該 ID 非 Button(如 ImageButton、TextView)。findViewById 未在 setContentView 後呼叫,導致欄位為 null。this 指向錯誤。public class SmsActivity extends Activity {
private Button btnSend;
private EditText etPhone, etContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
btnSend = findViewById(R.id.btn_send);
etPhone = findViewById(R.id.et_phone);
etContent = findViewById(R.id.et_content);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
String phone = etPhone.getText().toString().trim();
String content = etContent.getText().toString().trim();
if (TextUtils.isEmpty(phone) || TextUtils.isEmpty(content)) {
Toast.makeText(SmsActivity.this, "請填寫完整", Toast.LENGTH_SHORT).show();
return;
}
SmsManager.getDefault().sendTextMessage(phone, null, content, null, null);
Toast.makeText(SmsActivity.this, "發送成功", Toast.LENGTH_SHORT).show();
}
});
}
}
switch(v.getId()) 與強轉風險。