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

Android 註冊頁面跳轉崩潰排查全攻略:權限缺失、空指針、異步處理與代碼結構優化

     編輯:程式設計疑難解答

崩潰現場

點擊驗證碼校驗按鈕後,startActivity(intent) 導致 App 停止運行。

核心問題與修復

  1. 缺少網絡權限:
    <uses-permission android:name="android.permission.INTERNET" />
  2. 驗證碼非空校驗:
    if (TextUtils.isEmpty(mCode)) {
        Toast.makeText(this, "請輸入驗證碼", Toast.LENGTH_SHORT).show();
        return;
    }
  3. 代碼結構解耦:將監聽器邏輯提取為獨立方法(registerListener()、createDialog()),避免匿名內部類過度嵌套。
  4. 異步處理規範:網絡請求(獲取驗證碼)必須在子線程,結果回主線程更新 UI,使用 Handler、runOnUiThread 或 RxJava/Kotlin 協程。
  5. Dialog 復用:提取通用 createDialog(title, msg) 方法,減少重複代碼。

優化後代碼骨架

public class RegisterPhoneActivity extends Activity {
    private EditText etPhone, etCode;
    private Button btnGetCode, btnNext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_phone);
        findViews();
        registerListeners();
    }

    private void findViews() { ... }

    private void registerListeners() {
        btnNext.setOnClickListener(v -> verifyCode());
        btnGetCode.setOnClickListener(v -> requestCode());
    }

    private void verifyCode() {
        String code = etCode.getText().toString().trim();
        if (TextUtils.isEmpty(code)) { showToast("請輸入驗證碼"); return; }
        if (code.equals(DataShare.getCode())) {
            startActivity(new Intent(this, RegisterUserActivity.class));
        } else {
            showDialog("驗證碼錯誤", "請檢查輸入");
        }
    }

    private void requestCode() {
        String phone = etPhone.getText().toString().trim();
        if (!isValidPhone(phone)) { showDialog("手機號錯誤", "格式不正確"); return; }
        DataShare.setPhone(phone);
        // 子線程網絡請求...
    }
    // 輔助方法...
}

調試技巧

  • 關閉其他項目,斷點調試,F6 單步跟蹤。
  • Logcat 過濾 AndroidRuntime 獲取異常堆棧。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved