将我的 Android 应用程序连接到 MySQL 时出现问题

There is a problem connecting my Android application to MySQL

提问人:nothin7 提问时间:10/10/2023 最后编辑:nothin7 更新时间:10/10/2023 访问量:41

问:

我是创建 Android 应用程序的新手,我用 Kotlin 编写代码,我需要您的帮助。

我想将我的 Android 应用程序连接到位于 MySQl 计算机上的本地服务器。我已经写了代码,并认为它会百分之百工作,但没有任何效果。例如,我需要,我的用户可以注册并将此数据发送到服务器,然后我可以使用此数据轻松登录此帐户。

我已经有一个网站,它已经连接到这个本地服务器和数据库,一切正常。

这是文件“Dbhelper”

package com.example.myapplication

import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.sql.SQLException

class Dbhelper(private val url: String, private val user: 
String, private val password: String) {
init {
    try {
        Class.forName("com.mysql.cj.jdbc.Driver")
    } catch (e: ClassNotFoundException) {
        e.printStackTrace()
    }
}

fun connect(): Connection? {
    try {
        return DriverManager.getConnection(url, user, password)
    } catch (e: SQLException) {
        e.printStackTrace()
    }
    return null
}

fun isUserExists(login: String, email: String): Boolean {
    connect()?.use { connection ->
        val query = "SELECT * FROM appmovie_users WHERE login = ? OR email = ?"
        val preparedStatement = connection.prepareStatement(query)
        preparedStatement.setString(1, login)
        preparedStatement.setString(2, email)
        val resultSet: ResultSet = preparedStatement.executeQuery()
        return resultSet.next()
    }
    return false
}

fun addUser(login: String, email: String, password: String): Boolean {
    connect()?.use { connection ->
        val query = "INSERT INTO appmovie_users (login, email, password) VALUES (?, ?, ?)"
        val preparedStatement = connection.prepareStatement(query)
        preparedStatement.setString(1, login)
        preparedStatement.setString(2, email)
        preparedStatement.setString(3, password)
        val rowsAffected = preparedStatement.executeUpdate()
        return rowsAffected > 0
    }
    return false
}

}

这是文件“RegistrationActivity.kt”

package com.example.myapplication 
                                                          
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider

class RegistrationActivity : AppCompatActivity() {

private lateinit var viewModel: RegistrationViewModel

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

    val userLogin = findViewById<EditText>(R.id.user_login)
    val userEmail = findViewById<EditText>(R.id.user_email)
    val userPass = findViewById<EditText>(R.id.user_pass)
    val button = findViewById<Button>(R.id.button_reg)
    val linkToAuth = findViewById<TextView>(R.id.link_to_auth)
    val logoName = findViewById<TextView>(R.id.logoName)

    val dbUrl = "jdbc:mysql://localhost:3306/database-users-movieapp"
    val dbUser = "root"
    val dbPassword = ""

    val dbHelper = Dbhelper(dbUrl, dbUser, dbPassword)

    viewModel = ViewModelProvider(this)[RegistrationViewModel::class.java]

    button.setOnClickListener {
        val login = userLogin.text.toString().trim()
        val email = userEmail.text.toString().trim()
        val pass = userPass.text.toString().trim()

        if (login == "" || email == "" || pass == "") {
            Toast.makeText(this, "Not all fields are filled", Toast.LENGTH_LONG).show()
        } else {
            if (dbHelper.isUserExists(login, email)) {
                Toast.makeText(this, "User with the same login or email already exists", Toast.LENGTH_LONG).show()
            } else {
                viewModel.registerUser(login, email, pass)
            }
        }
    }
}

} 这是文件“RegistrationViewModel”

package com.example.myapplication

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class RegistrationViewModel : ViewModel() {
    private val DB_URL = "jdbc:mysql://localhost:3306/database- 
 users-movieapp"
private val DB_USER = "root"
private val DB_PASSWORD = ""

private val databaseHelper = Dbhelper(DB_URL, DB_USER, DB_PASSWORD)

val registrationResult = MutableLiveData<Boolean>()

fun registerUser(login: String, email: String, password: String) {
    viewModelScope.launch(Dispatchers.IO) {
        val isRegistrationSuccessful = databaseHelper.addUser(login, email, password)
        registrationResult.postValue(isRegistrationSuccessful)
    }
}

}

我尝试了很多方法,但没有任何帮助,当我输入注册数据并单击按钮提交时,没有任何反应

android mysql kotlin phpmyadmin localserver

评论

0赞 Skizo-ozᴉʞS ツ 10/10/2023
您好,我们需要一些代码来查看您的代码出了什么问题,否则很难确定问题所在。
0赞 nothin7 10/10/2023
我添加了部分代码,您需要更多吗?
0赞 Bruno 10/10/2023
这不是正确的方法。您必须在服务器上开发 API、网络服务
0赞 nothin7 10/10/2023
这是一个本地服务器,我怎么能做到这一点?

答: 暂无答案