Проблема передачи параметров в Retrofit API, используя метод POST - PullRequest
0 голосов
/ 03 июля 2019

Я хочу получать уведомления от сервера, используя API.Я использую Retrofit2 для работы с API.

Проблема заключается в том, что при передаче параметра в метод POST я получаю сообщение «IllegalArgumentException URL не содержит параметр».

Параметрправильно и работает в iOS.Я хочу реализовать в Android.

Ниже приведен результат при отладке приложения.

      Caused by: java.lang.IllegalArgumentException: URL 
      "notification/newnotification" does not contain "{userid}". (parameter #1)

Я попытался изменить параметры и тоже спросил разработчика API.Он говорит, что параметр правильный.

Это код для интерфейса API:

public interface API{
    @FormUrlEncoded
    @POST("notification/newnotification")
    Call<ResponseBody> getUserNotification(
        @Path("userid") int userid
    );
 }

RetrofitClient.java

public class RetrofitClient {

public static final String BASE_URL = "http://danceglobe.co/dance/api/";
private static RetrofitClient mInstance;
private Retrofit retrofit;

private RetrofitClient(){
    retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}

public static synchronized RetrofitClient getInstance(){
    if(mInstance == null) {
        mInstance = new RetrofitClient();
    }
    return mInstance;
}

public API getApi(){
    return retrofit.create(API.class);
}


}

Вызов функции из MainActivity

    private void getNotification(String currentUserId) {
    Call<ResponseBody> call = RetrofitClient.getInstance().getApi().getUserNotification(Integer.parseInt(currentUserId));
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if(!response.isSuccessful()){
                Toast.makeText(MainActivity.this,response.message(),Toast.LENGTH_SHORT).show();
            }

            try {
                String s = response.body().string();
                Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toast.makeText(MainActivity.this,t.getMessage(),Toast.LENGTH_SHORT).show();
        }
    });

}

Я хочу, чтобы он отвечал на некоторые данные.

Пожалуйста, помогите мне.Я застрял в этом за последние 2 дня.

Ответы [ 2 ]

1 голос
/ 03 июля 2019
 Caused by: java.lang.IllegalArgumentException: URL 
  "notification/newnotification" does not contain "{userid}". (parameter #1)

означает, что вы должны добавить userId к пути, как

public interface API {
    @POST("notification/newnotification/{userid}")
    Call<ResponseBody> getUserNotification(
        @Path("userid") int userid
    );
}

@Path("userid") отображает переменную на заполнитель {userid}, который отсутствовал.

0 голосов
/ 03 июля 2019

Я заработал, внеся некоторые изменения в интерфейс API. Ниже новый код для интерфейса API

@FormUrlEncoded
@POST("notification/newnotification")
Call<ResponseBody> getUserNotification(
        @Field("userid") String userid   // changed line 
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...