Работая на проекте 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()
}
}
}
}