Письмо было отправлено из поврежденного приложения (KOTLIN) - PullRequest
0 голосов
/ 17 декабря 2018

Почему происходит сбой приложения, но электронное письмо было отправлено получателю?

с использованием активации.jar , extra.jar и почты.jar library

функция onPostExercute() не выполняется

ошибка

java.lang.IllegalArgumentException: указанный параметркак ненулевое значение равно нулю: метод kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, параметр aVoid

class MainActivity : AppCompatActivity(), View.OnClickListener {

//Declaring EditText
private var editTextEmail: EditText? = null
private var editTextSubject: EditText? = null
private var editTextMessage: EditText? = null

//Send button
private var buttonSend: Button? = null

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

    //Initializing the views
    editTextEmail = findViewById(R.id.editTextEmail)
    editTextSubject = findViewById(R.id.editTextSubject)
    editTextMessage = findViewById(R.id.editTextMessage)

    buttonSend = findViewById(R.id.buttonSend) as Button

    //Adding click listener
    buttonSend!!.setOnClickListener(this)
}


private fun sendEmail() {
    //Getting content for email
    val email = editTextEmail!!.text.toString().trim { it <= ' ' }
    val subject = editTextSubject!!.text.toString().trim { it <= ' ' }
    val message = editTextMessage!!.text.toString().trim { it <= ' ' }

    //Creating SendMail object
    val sm = SendEmail(this, email, subject, message)

    //Executing sendmail to send email
    sm.execute()
}

override fun onClick(v: View) {
    sendEmail()

}
}


class SendEmail//Class Constructor
(//Declaring Variables
private val context: Context, //Information to send email
private val email: String, private val subject: String, private val message: String
)//Initializing variables
: AsyncTask<Void, Void, Void>() {
private var session: Session? = null

//Progressdialog to show while sending email
private var progressDialog: ProgressDialog? = null

override fun onPreExecute() {
    super.onPreExecute()
    //Showing progress dialog while sending email
    progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...", false, false)
}

override fun onPostExecute(aVoid: Void) {
    super.onPostExecute(aVoid)
    //Dismissing the progress dialog
    progressDialog!!.dismiss()
    //Showing a success message
    Toast.makeText(context, "Message Sent", Toast.LENGTH_LONG).show()
}

override fun doInBackground(vararg params: Void): Void? {
    //Creating properties
    val props = Properties()

    //Configuring properties for gmail
    //If you are not using gmail you may need to change the values
    props.put("mail.smtp.host", "smtp.gmail.com")
    props.put("mail.smtp.socketFactory.port", "465")
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
    props.put("mail.smtp.auth", "true")
    props.put("mail.smtp.port", "465")

    //Creating a new session
    session = Session.getDefaultInstance(props,
        object : javax.mail.Authenticator() {
            //Authenticating the password
            override fun getPasswordAuthentication(): PasswordAuthentication {
                return PasswordAuthentication(Config.EMAIL, Config.PASSWORD)
            }
        })

    try {
        //Creating MimeMessage object
        val mm = MimeMessage(session)

        //Setting sender address
        mm.setFrom(InternetAddress(Config.EMAIL))
        //Adding receiver
        mm.addRecipient(Message.RecipientType.TO, InternetAddress(email))
        //Adding subject
        mm.setSubject(subject)
        //Adding message
        mm.setText(message)

        //Sending email
        Transport.send(mm)
        Toast.makeText(context, "success", Toast.LENGTH_LONG).show()


        //Toast.makeText(this, "message", Toast.LENGTH_SHORT).show()

    } catch (e: MessagingException) {
        e.printStackTrace()
    }

    return null
}
}

1 Ответ

0 голосов
/ 17 декабря 2018

Измените

override fun onPostExecute(aVoid: Void) {

на:

override fun onPostExecute(aVoid: Void?) {

оно должно быть обнуляемым, так как вы возвращаете нуль из doInBackground, который передается onPostExecute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...