Проблема с получением ответа от POST HttpRequest в Java

В настоящее время я занимаюсь разработкой приложения в Android Studio на Java, и, не вдаваясь в подробности, мне нужна часть приложения для вставки данных, заполненных в результате активности, в базу данных MySQL. Я использую Apache для запуска PHP-скриптов для взаимодействия с базой данных.

Я знаю, что приложение обращается к базе данных нормально, потому что я прекрасно вхожу в приложение, и это читает таблицу, чтобы убедиться, что комбинация идентификатора пользователя и пароля существует. Функция входа в систему отправляет GET-запрос, я знаю, что это небезопасно и скоро заменит его на POST-запрос. Сначала я просто хотел разобраться с другими частями приложения. Я попытался POST-запрос, чтобы вставить данные, чтобы попытаться получить зависание POST-запросов.

В принципе, хотя GET-запрос на чтение таблицы пользователей для получения данных для входа в систему работает нормально, вставка новых данных — нет. Вот мой PHP для вставки записи:

// Create connection to database
include_once 'db.php';
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// check fields are populated
if (isset($_POST['trip_user_id']) && isset($_POST['trip_place_id'])
&& isset($_POST['start_date']) && isset($_POST['end_date']) && isset($_POST['private_indicator'])) {
$tripUserId = $_POST['trip_user_id'];
$tripPlaceId = $_POST['trip_place_id'];
$tripStartDate = $_POST['trip_start_date'];
$tripEndDate = $_POST['trip_end_date'];
$privateIndicator = $_POST['private_indicator'];
//query to insert record
$sql = "INSERT INTO user_trips (trip_user_id, trip_place_id, trip_start_date, trip_end_date, private_indicator) VALUES
('$tripUserId', '$tripPlaceId', '$tripStartDate', '$tripEndDate', '$privateIndicator');";
// Confirm there are results
if (mysqli_query($con, $sql)) {
// inserted successfully
echo "new record created successfully";
} else {
echo "Error: ;" . $sql . "<br>" . mysqli_error($con);
}
}
// Close connections
mysqli_close($con);

db.php, включенный во вторую строку, используется логином php и работает нормально, это следующее:

// Create connection to database
$con=mysqli_connect("localhost","root","*****","business_trips");

Наконец, вот код Java для отправки HTTP-запроса

public JSONArray makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP
try {
// check for request method
if(method == "POST"){
// request method is POST
String paramString = URLEncodedUtils.format(params, "utf-8");
byte[] postData = paramString.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
URL urlObj = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();

urlConnection.setDoOutput(true);
urlConnection.setInstanceFollowRedirects(false);
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty( "charset", "utf-8");
urlConnection.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
urlConnection.setUseCaches( false );
urlConnection.getOutputStream().write(postData);

is = urlConnection.getInputStream();

}else if(method == "GET"){
// request method is GET
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
URL urlObj = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
is = urlConnection.getInputStream();
}

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}

// try parse the string to a JSON object
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}

// return JSON String
return jObj;

}

Список «params» NameValuePair — это информация, введенная пользователем, и когда я посмотрел в отладчике, вся информация там прекрасно сохранилась. Программа попадает в часть кода method == «POST».

Когда программа попадает в строку «while ((line = reader.readLine ())! = Null) {», цикл никогда не запускается, поэтому reader.readLine сразу же возвращает ноль. Когда возникла проблема с синтаксисом моего php (отсутствующая точка с запятой), он возвратил это прекрасно, что заставляет меня думать, что есть проблема с моим php кодом, когда дело доходит до возврата сообщения об успехе или ошибке. Похоже, что оно должно отправлять обратно сообщение об ошибке SQL, потому что вставленная запись также никогда не отображается в таблице.

Я исчерпал любой вариант, который мог придумать, я прочитал несколько уроков, но не могу понять, что это правильно. Кто-нибудь может увидеть, где я мог пойти не так?

Если я упустил какие-либо детали, пожалуйста, дайте мне знать.

Спасибо,
Майк

0

Решение

Задача ещё не решена.

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector