Android Studio - Kotlin: сбой приложения на устройстве при выполнении запроса к SQL серверу - PullRequest
0 голосов
/ 02 мая 2020

Работая на проекте Android Studio 3.6.3 на компьютере Windows 10 x64, я пытаюсь выполнить INSERT-запрос к базе данных SQL Сервера с помощью драйвера jtds, мое приложение отлично работает на Android Эмулятор, но при публикации на моем устройстве происходит сбой, как только я нажимаю кнопку «Отправить», которая выполняет запрос INSERT. Для этого я сделал все настройки сервера и правила брандмауэра, чтобы разрешить удаленные подключения. вот что я пытаюсь сделать с Kotlin:

@SuppressLint("NewApi")
fun sqlAgent(user: String, password: String, database: String, server: String): Connection? {
    val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
    StrictMode.setThreadPolicy(policy)
    var connection: Connection? = null
    var ConnectionURL: String?=null
    try {
        Class.forName("net.sourceforge.jtds.jdbc.Driver")
        ConnectionURL = "jdbc:jtds:sqlserver://$server;database=$database;user=$user;password=$password;"

        connection = DriverManager.getConnection(ConnectionURL)
    } catch (se: SQLException) {
        Log.e("error here 1 : ", se.message)
    } catch (e: ClassNotFoundException) {
        Log.e("error here 2 : ", e.message)
    } catch (e: Exception) {
        Log.e("error here 3 : ", e.message)
    }
    return connection

}

Событие OnClick выполняет функцию через asyn c Задача, подобная этой:

login!!.setOnClickListener {
        val checkLogin =  CheckLogin() // this is the Asynctask, which is used to process in background to reduce load on app process
        checkLogin.execute("")
    }
 inner class CheckLogin : AsyncTask<String?, String?, String?>() {

    override fun onPostExecute(r: String?) {

        val username = username!!.text.toString()
        val password = password!!.text.toString()
        val mail =email!!.text.toString()
        val usrIsActive=setUsrActive!!.isChecked

        if (username.trim { it <= ' ' } == "" || password.trim { it <= ' ' } == "")
            Toast.makeText(this@MainActivity, "Please enter username and password.", Toast.LENGTH_LONG) .show()
        else {

            try {
                progressBar!!.visibility = View.VISIBLE
                con = sqlAgent(un.toString(),pass.toString(),db.toString(), ip.toString()) // Connect to database
                if (con == null) {
                    Toast.makeText(this@MainActivity, "Please check your internet connection.", Toast.LENGTH_LONG) .show()
                }
                else
                {
                    // Change below query according to your own database.
                    val query = "INSERT INTO [ArcgisData].[dbo].[tblUSERS] VALUES ('$username','$password','$mail','$usrIsActive')"
                    val stmt = con!!.createStatement()
                    stmt.executeUpdate(query)
                    progressBar!!.visibility = View.GONE
                    Toast.makeText(this@MainActivity, "User added successfully!", Toast.LENGTH_LONG) .show()
                }
            } catch (ex: Exception) {
                Toast.makeText(this@MainActivity, ex.message, Toast.LENGTH_LONG) .show()
            }
        }

    }
}
...