java — HTTP-соединение Android (libGDX) с mySQL с использованием PHP-сценариев на стороне сервера

Я пытаюсь связать мой проект libGDX (java) android с базой данных mySQL с помощью сценариев PHP на стороне сервера, чтобы реализовать процесс входа в систему с использованием метода POST (включая имя пользователя и пароль).

Поэтому я сталкиваюсь с неожиданными проблемами. Для вашей информации я использую XAMPP и веб-сервер APACHE локально.

С чем я сталкиваюсь! Иногда PHP-скрипт отправляет обратно следующую строку ответа, как будто не распознает параметры POST (несмотря на то, что сообщение POST включает их и содержит значения (строка) !!):

<b>Notice</b>: Undefined index: username in <b>C:\xampp\htdocs\login\login.php</b> on line <b>5</b><br />
<br />
<b>Notice</b>: Undefined index: password in <b>C:\xampp\htdocs\login\login.php</b> on line <b>6</b><br />

Некоторые другие, отладчик (в Android Studio), который позволяет показывать мне журналы отладки, перестает отображать любой журнал после нажатия 2-5 раз btnclickLogin () (показано ниже), который реализует действие входа в систему.

Мне кажется, что http-соединение зависает и, возможно, слушатель кнопки нажатия больше не отвечает !!!

Более странным является то, что ИНОГДА тот же код, возвращает «успех», и все работает отлично.

Код Android является следующим

private void btnclickLogin() {

//Getting values from edit texts
Gdx.app.setLogLevel(Application.LOG_DEBUG);

final String username = usernamefld.getText().toString().trim();
final String password = passwordfld.getText().toString().trim();

Map<String, String> parameters = new HashMap<String, String>();
parameters.put("username", username);
parameters.put("password", password);

Gdx.app.debug("Login process started.", "Username=/" + username + "/  Password=/" + password + "/");

HttpRequestBuilder requestBuilder = new HttpRequestBuilder();
HttpRequest httpRequest;

httpRequest = requestBuilder.newRequest().method(Net.HttpMethods.POST).url("http://192.168.1.2/login/login.php").content(HttpParametersUtils.convertHttpParameters(parameters)).build();
httpRequest.setHeader("Content-Type", "application/x-www-form-urlencoded");

httpRequest.setTimeOut(6000);

Gdx.net.sendHttpRequest(httpRequest, new HttpResponseListener() {
@Override
public void handleHttpResponse(Net.HttpResponse httpResponse) {
String status = httpResponse.getResultAsString().trim();
Gdx.app.debug("Return result by the server=", status);

if(status.contains("success"))
game.setScreen(new StartingScreen(game));
}

@Override
public void failed(Throwable t) {

String status = "failed";
Gdx.app.debug("Connection failed due to the next error:", t.getMessage());
}

@Override
public void cancelled() {
}
});

httpRequest.reset();
Gdx.app.debug("Exiting", "From login button function");

}

PHP-скрипты

Для login.php

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
//Getting values
session_start();
$username = $_POST['username'];
$password = $_POST['password'];

//Creating sql query
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";

//importing dbConnect.php script
require_once('dbConnect.php');

//executing query
$result = mysqli_query($con,$sql);

//fetching result
$check = mysqli_fetch_array($result);

//if we got some result
if(isset($check)){
//displaying success
echo "success";
}else{
//displaying failure
echo "failure";
}
mysqli_close($con); }?>

Для dbConnect.php

<?php
define('HOST',"localhost");
define('USER',"root");
define('PASS',"");
define('DB',"userlogging");
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Connection failed: ' . $conn->connect_error);
$con->set_charset("utf8");   ?>

Пожалуйста, помогите преодолеть эту проблему и сделать http-соединение «стабильным» !!

Большое спасибо.

0

Решение

Мишра, извините за последний мой ответ.

Да, на самом деле я поместил print_r, чтобы увидеть значения, которые подходят к PHP-скрипту, и обнаружил, что оба параметра отсутствуют.

После стольких поисков в Интернете и найденных альтернативных решений я так и не выяснил, почему это происходит. Итак, я заменил HttpRequestBuilder.

Наконец, чтобы получить полный рабочий код, я использовал следующий, и теперь все отлично работает.

 final String username = usernamefld.getText().toString().trim();
final String password = passwordfld.getText().toString().trim();

Map<String, String> parameters = new HashMap<String, String>();
parameters.put("username", username);
parameters.put("password", password);
final HttpRequest httpRequest = new HttpRequest(Net.HttpMethods.POST);
httpRequest.setHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest.setHeader("Upgrade", "HTTP/1.1, HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11");
httpRequest.setUrl(LOGIN_URL);
httpRequest.setContent(HttpParametersUtils.convertHttpParameters(parameters));
httpRequest.setTimeOut(6000);

В очередной раз благодарим за помощь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]