使用 POST 方法在 Retrofit api 中传递参数时出现问题

我想使用 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();

            }


        }


我希望它响应一些数据。


请帮我。从过去的两天开始,我就陷入了困境。


白猪掌柜的
浏览 233回答 2
2回答

开满天机

&nbsp;Caused by: java.lang.IllegalArgumentException: URL&nbsp;&nbsp; "notification/newnotification" does not contain "{userid}". (parameter #1)意味着您应该将 userId 添加到路径中public interface API {&nbsp; &nbsp; @POST("notification/newnotification/{userid}")&nbsp; &nbsp; Call<ResponseBody> getUserNotification(&nbsp; &nbsp; &nbsp; &nbsp; @Path("userid") int userid&nbsp; &nbsp; );}

一只斗牛犬

我通过对 API 接口进行一些更改使其工作。以下是 API 接口的新代码@FormUrlEncoded@POST("notification/newnotification")Call<ResponseBody> getUserNotification(&nbsp; &nbsp; &nbsp; &nbsp; @Field("userid") String userid&nbsp; &nbsp;// changed line&nbsp;);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java