Почему я получаю ошибку IllegalArgumentException при удалении данных по идентификатору с помощью Retrofit2? И как это исправить? - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь удалить пользователя в phpmyadmin по параметру id с помощью Java, Retrofit, PHP, MySQL. Когда я нажимаю кнопку удаления, в Logcat я получаю ОШИБКА :

 java.lang.IllegalArgumentException: URL query string "id={id}" must not have replace block. For dynamic query parameters use @Query.
    for method UsersAPI.deletePost

UserAPI. java:

import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface UsersAPI {

    @GET("users_read.php")
    Call<List<User>> getUsers();

    @DELETE("delete_user.php?id={id}")
    Call<Void> deletePost(@Path("id") int id);
}

AdminActivity. java: Вот слушатель кнопки удаления:

btnDeleteUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int deleteId = Integer.parseInt(editTextDeleteUser.getText().toString());
                Call<Void> call = usersAPI.deletePost(deleteId);
                call.enqueue(new Callback<Void>() {
                    @Override
                    public void onResponse(Call<Void> call, Response<Void> response) {
                        Toast.makeText(AdminActivity.this,"Response code: "+response.code(),Toast.LENGTH_SHORT).show();
                        return;
                    }

                    @Override
                    public void onFailure(Call<Void> call, Throwable t) {
                        Toast.makeText(AdminActivity.this, "Error : "+ t.getMessage(), Toast.LENGTH_SHORT).show();
                    }
            });

Почему я получаю эту ошибку? И как это исправить. Заранее спасибо.

1 Ответ

1 голос
/ 11 февраля 2020

Замените это:

 @DELETE("delete_user.php?id={id}")
Call<Void> deletePost(@Path("id") int id);

Этим

 @DELETE("delete_user.php")
Call<Void> deletePost(@Query("id") int id);

@ Path используется для построения динамической конечной точки c, но для запросов Query вам необходимо запросить аннотацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...