④【Kotlin】RegisterActivity.kt

Kotlin

activity_register.xmlで送信ボタンしたら、WordPressのAPIのregister_user関数を呼び出して返り値を受け取ります

package com.example.application0210

class RegisterActivity : AppCompatActivity() {

    private lateinit var prefs: PrefsManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_register)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.register)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        // MainへIntentで戻る
        val btnGoToMain = findViewById<Button>(R.id.btnGoToMain)
        btnGoToMain.setOnClickListener{
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }

        val etUsername = findViewById<EditText>(R.id.etUsername)
        val etPassword = findViewById<EditText>(R.id.etPassword)
        val btnRegister = findViewById<Button>(R.id.btnRegister)
        prefs = PrefsManager(this)

        btnRegister.setOnClickListener {
            val username = etUsername.text.toString().trim()
            val password = etPassword.text.toString().trim()
            if (username.isEmpty() || password.isEmpty()) {
                Toast.makeText(this, "ユーザー名とパスワードを入力してください", Toast.LENGTH_LONG).show()
                return@setOnClickListener
            }

            registerUser(username, password) { success, userId, userName ->
                if (success) {
                    prefs.saveUserId(userId!!) // !!はuserIdがNULLでないと仮定し強制的にコードを実行させます
                    prefs.saveUserName(userName!!)
                    Toast.makeText(this, "登録成功: $userName", Toast.LENGTH_LONG).show()
                    startActivity(Intent(this, MainActivity::class.java))
                    finish()
                } else {
                    prefs.saveUserId("NO USER ID")
                    prefs.saveUserName("NO USER NAME")
                    Toast.makeText(this, "登録失敗", Toast.LENGTH_LONG).show()
                }
            }
        }

    }

    private fun registerUser(username: String, password: String, onComplete: (Boolean, String?, String?) -> Unit) {
        val url = "https://azurlane.work/wp-json/custom-api/v1/register/"
        val params = HashMap<String, String>()
        params["username"] = username
        params["password"] = password

        val request = object : StringRequest(
            POST, url,
            Response.Listener { response ->
                    val json = JSONObject(response)
                    if (json.getString("status") == "success") {
                        val userId = json.optString("user_id", "")
                        val userName = json.optString("user_name", "")
                        if (userId.isNotEmpty() && userName.isNotEmpty()) {
                            onComplete(true, userId, userName)
                        } else {
                            Log.e("RegisterError", "レスポンスにユーザーIDが見つかりません")
                            onComplete(false, null, null)
                        }
                    } else {
                        Log.e("RegisterError", "Invalidステータス: ${json.optString("status", "null")}")
                        onComplete(false, null, null)
                    }
            },
            Response.ErrorListener { error ->
                Log.e("RegisterError", "Volleyエラー: ${error.message}")
                onComplete(false, null, null)
            }
        ) {
            override fun getParams(): MutableMap<String, String>{
                return params
            }
        }

        Volley.newRequestQueue(this).add(request)
    }

}

解説1

prefs.saveUserId(userId!!)

「!!」はuserIdがnullでないと仮定し、強制的にコードを実行します

もしnullだった場合、アプリがクラッシュします

BACK