Как я могу передать значение счетчика в методе POST в kotlin? - PullRequest
0 голосов
/ 04 марта 2020

В моем приложении есть счетчик для выбора пола для пользователей, но я не уверен, как передать значение счетчика внутри моего method.POST и как я могу отправить выбранное значение

Вот мой POST код:

fun editUserProfile(context: Context,id: Int, gender: String, email: String, firstName: String, lastName: String, mobile: String, address: String, whatsapp: String, complete: (Boolean) -> Unit) {
        val jsonBody = JSONObject()
        jsonBody.put("id", id)

        jsonBody.put("gender", gender)

        jsonBody.put("Email", email)
        jsonBody.put("FirstName", firstName)
        jsonBody.put("LastName", lastName)
        jsonBody.put("Mobile", mobile)
        jsonBody.put("Address", address)
        jsonBody.put("whatsapp", whatsapp)
        val requestBody = jsonBody.toString()

        val editRequest = object : StringRequest(Method.POST, URL_EDIT_USER, Response.Listener {response ->
            println(response)
            complete(true)
        }, Response.ErrorListener { error ->
            Log.d("ERROR", "Could not edit user: $error")
            complete(false)
        }) {
            override fun getBodyContentType(): String {
                return "application/json; charset=utf-8"
            }

            override fun getBody(): ByteArray {
                return requestBody.toByteArray()
            }
        }
        Volley.newRequestQueue(context).add(editRequest)
    }

Вот мой EditUserActivity:

class EditUserActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.edit_user)

        editSpinner.visibility = View.INVISIBLE

        val genderList = arrayOf("","Female", "Male")
        val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, genderList)

        genderSpinner.adapter = arrayAdapter

        genderSpinner.onItemSelectedListener = object :

         AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
//                findViewById<TextView>(R.id.userGender).text = genderList[position]
            }

        }

        EditFirstName.setText(UserDataService.firstName)
        EditLastName.setText(UserDataService.lastName)
        EditEmail.setText(UserDataService.email)
        EditMobile.setText(UserDataService.mobile)
        EditWhatsapp.setText(UserDataService.whatsapp)
        EditAddress.setText(UserDataService.address)
    }

    fun editButtonClicked(view: View) {
        enableSpinner(true)
        val firstName = EditFirstName.text.toString()
        val lastName = EditLastName.text.toString()
        val email = EditEmail.text.toString()
        val mobile = EditMobile.text.toString()
        val whatsapp = EditWhatsapp.text.toString()
        val address = EditAddress.text.toString()
        val gender = genderSpinner

        if (firstName.isNotEmpty() && lastName.isNotEmpty() && email.isNotEmpty() && mobile.isNotEmpty() && address.isNotEmpty() && whatsapp.isNotEmpty()) {
            AuthService.editUserProfile(this, UserDataService.id,gender,email,firstName,lastName,mobile, address, whatsapp) { editSuccess ->
                if (editSuccess) {
                    val userDataChange = Intent(BROADCAST_USER_DATA_CHANGE)
                    LocalBroadcastManager.getInstance(this).sendBroadcast(userDataChange)
                    enableSpinner(false)
                    UserDataService.firstName = firstName
                    UserDataService.lastName = lastName
                    UserDataService.email = email
                    UserDataService.mobile = mobile
                    UserDataService.whatsapp = whatsapp
                    UserDataService.address = address
                    UserDataService.gender = gender.toString()
                    val intent = Intent(this, UserProfile::class.java)
                    startActivity(intent)
                    finish()
                }
                else {
                    errorToast()
                }
            }
        } else {
            Toast.makeText(this, "Make sure the fields are filled.", Toast.LENGTH_LONG).show()
            enableSpinner(false)
        }
    }

    fun errorToast() {
        Toast.makeText(this, "Something went wrong.", Toast.LENGTH_LONG).show()
        enableSpinner(false)
    }

    fun enableSpinner(enable: Boolean) {
        if (enable) {
            editSpinner.visibility = View.VISIBLE
            EditButton.isEnabled = false
            EditAddress.isEnabled = false
            EditEmail.isEnabled = false
            EditFirstName.isEnabled = false
            EditLastName.isEnabled = false
            EditWhatsapp.isEnabled = false
            EditMobile.isEnabled = false
        } else {
            editSpinner.visibility = View.INVISIBLE
            EditButton.isEnabled = true
            EditFirstName.isEnabled = true
            EditLastName.isEnabled = true
            EditEmail.isEnabled = true
            EditAddress.isEnabled = true
            EditMobile.isEnabled = true
            EditWhatsapp.isEnabled = true
        }
    }
}

Я не уверен, какое значение передать в мой val gender =, как я могу взять выбранное значение и передать его через мои почтовые данные?

1 Ответ

1 голос
/ 04 марта 2020

Вам нужно создать переменную, скажем, genderSelected и в onItemSelected методе счетчика, сохранить выбранное значение следующим образом:

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
     genderSelected = genderList.get(position)
}

И присвоить это genderSelected вашей модели следующим образом:

 UserDataService.gender = genderSelected

А также я установлю значение по умолчанию в genderSelected перед созданием адаптера, например:

// set the default value 
genderSelected = genderList.get(0)
val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, genderList)
...