Я пытаюсь добавить опцию удаления учетной записи в свое приложение, однако, когда я пытаюсь удалить учетную запись, я не получаю ответа от веб-сервера.
Вместо этого я получаю сообщение об ошибке:
org.json.JSONException: End of input at character 0 of
Я попытался изменить метод запроса на DELETE, однако я не слишком хорошо знаком с Android и базами данных, поэтому я не уверен, что это сработает. Я не уверен, связана ли проблема с кодом php или java, когда я запускаю отладчик в студии Android, возвращается ответ String:
response: ""
php:
<?php
if ($_SERVER['REQUEST_METHOD']=='POST'){
$id = $_POST['id'];
require 'conn.php';
$sql = "DELETE * FROM Patients WHERE patientID='$id'";
if (mysqli_query($conn, $sql)){
$result['success'] = "1";
$result['message'] = "success";
echo json_encode($result);
mysqli_close($conn);
} else {
$result["success"] = "0";
$result["message"] = "Error!";
echo json_encode($result);
mysqli_close($conn);
}
}
?>
Метод удаления Java:
private void deleteAccount() {
final String name = this.name.getText().toString().trim();
final String lName = this.lName.getText().toString().trim();
final String dob = this.dob.getText().toString().trim();
final String email = this.email.getText().toString().trim();
final String password = this.password.getText().toString().trim();
final String passwordConf = this.cPassword.getText().toString().trim();
final String id = getID;
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_DELETE,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String success = jsonObject.getString("success");
if (success.equals("1")){
Toast.makeText(EditAccount.this, "Account Deleted", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
Toast.makeText(EditAccount.this, "Error: "+e.toString(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(EditAccount.this, "Error: "+error.toString(), Toast.LENGTH_SHORT).show();
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<>();
params.put("id", id);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
Я ожидаю, что всплывет тост и скажет, что учетная запись удалена, но вместо этого я получаю сообщение об ошибке, указанное вверху.
p.s. это всего лишь прототип, поэтому на данный момент я не беспокоюсь о безопасности.
Спасибо!
Я добавил $result = array(); к моему коду, но, боюсь, не повезло, спасибо!
Запустив отладчик сейчас, теперь возвращается строка ответа: "{"success":"0","message":"Error!"}"




Какой бы ни была проблема, я собираюсь предположить и сказать, что if ($_SERVER['REQUEST_METHOD']=='POST') является корнем вашей проблемы.
Ваш запрос может быть отправлен на сервер неправильно, и method не распознается как POST, что объясняет ответ "", поскольку вы не предлагаете альтернативы тому, что должно произойти при невыполнении условия.
Отправьте обратно неверный ответ на запрос (400), и вы сможете устранить эту проблему в своем Java-коде... С PHP все в порядке.
if ($_SERVER['REQUEST_METHOD']=='POST') { /* ... */ }
else {
http_response_code(400);
// exit('Bad request method.');
// or for a json response:
echo json_encode([
'success' => "0",
'message' => "Bad Request Method used."
]);
}
Кроме того, я должен сказать... Безопасность всегда должна быть проблемой... Требуется всего несколько строк кода, чтобы отфильтровать запрос пользователя и сделать ваш запрос немного более безопасным с помощью подготовленных операторов. Это скорее вопрос привычек; однажды вы можете забыть запрос здесь или там.
Вы не определили
$result = array()в коде PHP, что, скорее всего, вызывает недопустимый текст уведомления json..