I created a login and registration application for Android devices using Xampp server and localhost. It worked on Android emulator but when I download the apk on real devices it doesn't connect to localhost server.
I used the ipv4 address to connect the Android emulator to localhost, but the actual devices where I downloaded the apk of the app cannot connect to the server.
package com.example.biletoss
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.widget.Button
import android.widget.CheckBox
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.android.volley.AuthFailureError
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.VolleyError
import com.android.volley.toolbox.JsonObjectRequest
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.google.android.material.textfield.TextInputEditText
import org.json.JSONException
import org.json.JSONObject
class LoginActivity : AppCompatActivity() {
lateinit var editTextEmail: TextInputEditText
lateinit var editTextPassword: TextInputEditText
lateinit var signIn: Button
lateinit var signUp: TextView
lateinit var rememberMeCheckbox: CheckBox
lateinit var sharedPreferences: SharedPreferences
val url_login = "http://192.168.0.8/biletoss/login.php"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
editTextEmail = findViewById(R.id.email)
editTextPassword = findViewById(R.id.password)
signIn = findViewById(R.id.sign_in)
signUp = findViewById(R.id.sign_up)
rememberMeCheckbox = findViewById(R.id.remember_me_checkbox)
sharedPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE)
val savedEmail = sharedPreferences.getString("email", "")
val savedPassword = sharedPreferences.getString("password", "")
val rememberMeChecked = sharedPreferences.getBoolean("rememberMe", false)
signUp.setOnClickListener {
val intent = Intent(this@LoginActivity, RegisterActivity::class.java)
startActivity(intent)
finish()
}
if (rememberMeChecked) {
editTextEmail.setText(savedEmail)
editTextPassword.setText(savedPassword)
rememberMeCheckbox.isChecked = true
}
signIn.setOnClickListener {
val email = editTextEmail.text.toString().trim()
val password = editTextPassword.text.toString().trim()
if (email.isEmpty()) {
Toast.makeText(this@LoginActivity, "Emailinizi giriniz", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (password.isEmpty()) {
Toast.makeText(this@LoginActivity, "Parolanızı giriniz", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
goLogin()
}
}
private fun goLogin() {
val email = editTextEmail.text.toString().trim()
val password = editTextPassword.text.toString().trim()
val stringRequest = object : StringRequest(
Request.Method.POST, url_login,
Response.Listener<String> { response ->
try {
val jsonObject = JSONObject(response)
val success = jsonObject.getString("success")
val jsonArray = jsonObject.getJSONArray("login")
if (success == "1") {
val intent = Intent(this@LoginActivity, HomePage::class.java)
startActivity(intent)
for (i in 0 until jsonArray.length()) {
val `object` = jsonArray.getJSONObject(i)
val ojbid = `object`.getString("id")
val ojbemail = `object`.getString("email").trim()
Toast.makeText(
this,
"Giriş başarılı",
Toast.LENGTH_SHORT
).show()
}
}
} catch (e: JSONException) {
e.printStackTrace()
Toast.makeText(this, "Error" + e.toString(), Toast.LENGTH_SHORT).show()
}
},
Response.ErrorListener { volleyError ->
Toast.makeText(this, "Error" + volleyError.toString(), Toast.LENGTH_SHORT)
.show()
}
) {
@Throws(AuthFailureError::class)
override fun getParams(): Map<String, String> {
val params = HashMap<String, String>()
params["email"] = email
params["password"] = password
return params
}
}
val requestQueue: RequestQueue = Volley.newRequestQueue(this)
requestQueue.add(stringRequest)
}
}
<?php
$conn = mysqli_connect("localhost", "root", "", "biletoss");
?>
<?php
require_once 'connection.php';
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['email']) && isset($_POST['password'])){
$email = $_POST['email'];
$password = $_POST['password'];
$email = mysqli_real_escape_string($conn, $email);
$password = mysqli_real_escape_string($conn, password_hash($password, PASSWORD_DEFAULT));
$sql = "SELECT * FROM users WHERE email = '$email'";
$response = mysqli_query($conn, $sql);
$result = array();
$result['login'] = array();
if(mysqli_num_rows($response) === 1){
$row = mysqli_fetch_assoc($response);
$index['id'] = $row['id'];
$index['email'] = $row['email'];
array_push($result['login'], $index);
$result["success"] = "1";
$result["message"] = "Giriş Başarılı";
echo json_encode($result);
} else {
$result["success"] = "0";
$result["message"] = "Giriş Başarısız";
echo json_encode($result);
}
mysqli_close($conn);
} else {
echo json_encode(array("success" => "0", "message" => "Email ve şifre eksik"));
}
}
?>