Я пытаюсь установить связь между приложением Android и сервером WAMP.Чтобы добиться этого, я использую механизм Volley и Singleton на стороне Android и 64-битный WAMP 3.1.4 на стороне сервера.
Я представляю весь процесс так: когда я нажимаю кнопку, какая-то строка будетбыть отправлено на сервер WAMP.Сервер обработает полученную строку и после этого предоставит ответ приложению Android.Основываясь на полученных ответах, приложение для Android сделает некоторые дальнейшие шаги.Я вставил отладочные отпечатки и журналы с обеих сторон, и в соответствии с ними данные успешно получены из приложения Android, но ответ от сервера, по-видимому, отсутствует (потому что Text Toast, который я поместил внутри функции onResponse, не отображается), поэтому etherсервер не дает ответа, или эфирное приложение Android не обрабатывает его должным образом.
Единственное, что мне пришло в голову, это то, что брандмауэр или антивирус как-то блокируют связь, поэтому я отключил их, норезультаты были одинаковыми - Text Toast внутри функции onResponse не вызывался.Вот фрагмент php-скрипта, который выполняется на стороне сервера и в котором я выполняю обработку полученных данных и форматирование ответа:
$conn = mysqli_connect($servername, $username, $password, $db_name);
if ($conn) {
echo "Connected successfully";
if (isset($_POST["LocationOfDriver"])) {
$LocationOfDriver = $_POST["LocationOfDriver"];
$Parsed = explode("|", $LocationOfDriver);
if (!(is_null($Parsed))) {
$Lat = $Parsed[0];
$Lon = $Parsed[1];
$file = fopen($path, 'r+');
$count = fgets($file, 1024);
$count = $count + 1;
fclose($file);
$file = fopen( $path, 'w');
fwrite($file, $count . " " . $Lat . " " . $Lon);
fclose($file);
//echo json_encode(array('response' => $Lat));
$response["response"] = "Success!";
} else {
echo "Nothing received";
$response["response"] = "Failure!";
}
} else {
$LocationOfDriver = null;
$response["response"] = "Failure!";
}
} else {
die("Connection failed: " . mysqli_connect_error());
$response["response"] = "Failure!";
}
echo json_encode($response);
mysqli_close($conn);
А вот фрагмент на стороне Android, где я форматирую то, что будет отправлено, игде я получаю ответ (этот метод вызывается при нажатии кнопки):
private void sendLocation(){
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String Response = jsonObject.getString("response");
Toast.makeText(MainActivity.this, Response, Toast.LENGTH_LONG).show();
WantToParkBtn.setText("positive feedback received");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "negative feedback received", Toast.LENGTH_LONG).show();
WantToParkBtn.setText("negative feedback received");
}
})
{
@Override
protected Map <String, String> getParams() throws AuthFailureError{
Map <String, String> params = new HashMap<>();
params.put("LocationOfDriver", "14.7|16.8");
return params;
}
};
MySingleton.getInstance(MainActivity.this).addToRequestQue(stringRequest);
Toast.makeText(MainActivity.this, "Request sent", Toast.LENGTH_LONG).show();
WantToParkBtn.setText("info sent");
}
Подводя итог, я получаю следующие результаты: 1) После нажатия кнопки печатается тост «Запрос отправлен» итекст кнопки меняется на «Информация отправлена» (хорошее поведение, которое ожидается) 2) на стороне сервера, когда я открываю текстовый файл с данными журнала, количество обращений увеличивается на 1 (хорошее поведение, что ожидается) 3)Пустыня тостов "Удачи!"или "Отказ!"не печатаются на стороне приложения Android (плохое поведение, которое не ожидается - ожидаемое поведение - печать одного из этих двух сообщений или сообщения об ошибке).Есть какие-нибудь идеи, что пошло не так?Заранее спасибо!