我可以在同一时间发布Retrofit @Path和@Field吗?

时间:2016-02-25 08:18:56

标签: java android json retrofit

我尝试发布

public interface Service  {

    @FormUrlEncoded
    @POST("/mobile/seeker/Search/JobsInCompany/{id}")
    Call<retrofit_companyList.Contributor> JobBKK_POST (@Path("id") String IdCompany,
                                                        @Field("token") String token,
                                                        @Field("page") String page);

}

StartRetrofit(){

        Retrofit_Build Build = new Retrofit_Build();

        Service connect = Build.retrofit.create(Service.class);

        Call<retrofit_companyList.Contributor> call = connect.POST(
                IDCompany,
                Token,
                Integer.toString(Page)
                );

        call.enqueue(new Callback<retrofit_companyList.Contributor>() {
            @Override
            public void onResponse(Response<retrofit_companyList.Contributor> response, Retrofit retrofit) {...}
            @Override
            public void onFailure(Throwable t) {
                Log.e(TAG, "Retrofit Fail : " + t.toString());
            });
}

然后这是日志

  

D / OkHttp: - &gt; POST / mobile / sample / JobsInCompany / 50357 HTTP / 1.1

     

D / OkHttp:token = XXXXX&amp;页= 1

     

D / OkHttp: - &gt; END POST(45字节正文)

     

D / OkHttp: - &gt; POST / mobile / sample / JobsInCompany / HTTP / 1.1

     

D / OkHttp:token = XXXXX&amp;页= 1

     

D / OkHttp: - &gt; END POST(45字节正文)

     

D / OkHttp:&lt; - HTTP / 1.1 200 OK(171ms)

     

D / OkHttp:服务器:nginx

     

V / Fragment_choose_company:改造成功运行:总列表:11

     

V / Fragment_choose_company:Retrofit Success Runnable:RTC company,co   和https://XXX/images/503571.jpg

     

V / Fragment_choose_company:改造成功Runnable:总清单:20

     

V / Fragment_choose_company:Retrofit Success Runnable:null和null

这个问题我只被召唤过一次。但改造发布了2次,数据响应为空

2 个答案:

答案 0 :(得分:0)

TL; DR

是的,但是它会导致逻辑错误。

正如您在日志中看到的那样,改装发布了2次。但结果并不像您期望的那样

<强>原因:

1. HTML表单使用两种MIME类型:

  • 应用程序/ x-WWW窗体-urlencoded

  • 的multipart / form-data的

2.InIn Retrofit:

  • @Field :表示表单编码请求的命名对

  • @Part :表示多部分请求的单个部分

因此,Retrofit了解您要创建2个POST请求:表单编码和多部分。这解释了为什么你在日志中看到它发布了两次。

答案 1 :(得分:0)

@NguyenDat解释了为什么你不能使用它。我有同样的问题。我试过两个@Path。同样的问题。

解决了我的问题是:@Path和@Query组合。