Retrofit 2.0 throwing @Field parameters can only be used with form encoding

最近在学习Retrofit2.0想用Retrofit + Dagger2 + RxJava + ButterKnife一起使用重构项目 一方面自己的demo随着业务逻辑的增多

显得非常的乱 另一方面代码和其他人合作写的繁多 重新看代码时往往业务逻辑从上往下看半天 好蛋疼== 

最主要是 Retrofit + Dagger2 + RxJava + ButterKnife 搭配demo的特点是 代码简洁简洁简洁!!!爽!

不信请看这个:http://blog.csdn.net/finddreams/article/details/50849385(感谢这位作者)

好了 记录一下吧

Retrofit2.0 使用Post请求方式 

@POST("get_smscode")
Observable<MsgInfoBean> getInfo(@Field("mobilePhoneNumber")String mobilePhoneNumber);
报错:@Field parameters can only be used with form encoding

到http://square.github.io/retrofit/去查 发现 少了 一句注释
@FormUrlEncoded加上就OK。

另外关于添加header

public static Retrofit getInstance() {

    if(retrofit==null){
GsonConverterFactory gsonConverterFactory = GsonConverterFactory.create();
OkHttpClient okHttpClient = new OkHttpClient();
OkHttpClient.Builder builder = okHttpClient.newBuilder();
builder.retryOnConnectionFailure(true);
retrofit=new Retrofit.Builder().client(new OkHttpClient().newBuilder().addInterceptor(new Interceptor() {

@Override
public Response intercept(Chain chain) throws IOException {

Request request = chain.request().newBuilder()
.addHeader("X-LC-Id",ConstanApi.APP_ID)
.addHeader("X-LC-Key",ConstanApi.APP_KEY)
.build();

return chain.proceed(request);
}
}).build())
.baseUrl(ConstanApi.baseUrl)
.addConverterFactory(gsonConverterFactory)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
return retrofit;
}

关于使用Retrofit的所有问题见:https://futurestud.io/blog/retrofit-add-custom-request-header

最后 附上一张帅图 接着赶路:

 
posted @ 2016-07-18 13:07  一座城池2012  阅读(2239)  评论(2编辑  收藏  举报