您的位置:首页 > 移动开发

Retrofit学习"Content-Type: application/json;charset=UTF-8"@Body的使用

2016-12-05 09:46 716 查看
提前声明这个实践是在Retrofit2+rxjava下是用的,不是使用call,而是用的observable,原理一样希望能帮助到你

前几天学Retrofit,正好有人遇见从自己项目的老框架转换成Retrofit事,对于习惯使用post传递键值对的我来说,突然发还有一部分传参数是"Content-Type: application/json;charset=UTF-8"的接口,这是什么鬼,Retrofit怎么调用。,然后自己查看了网上文章发现这个@Body的注解,写一下@Body的使用。

body可以使用两种方式一种是这样直接传递java对象这个对象是能够被gson解析成json字符串的,另一种是传递RequestBody对象,其实不管是那种方式最后传出去的参数都是json格式的

第一种传对象

/**
* Created by 淼素 on 2016/11/11 0011.
*/

public interface Api {
//    @FormUrlEncoded 我的项目还有键值对的接口,我没在乎直接用了,发现崩溃了,一直以为是自己写错了,结果屏蔽了这个就ok了。。
//    @POST()
//    Observable<Main_bean> listRepos(@Url String url,@FieldMap Map<String, String> params);
@POST("login.jhtml")
@Headers({ "Content-Type: application/json;charset=UTF-8"})
Observable<bean> addUser(@Body Login_user body);
}


调用

 
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MySettings.REQUESTURI)  //主url
.addConverterFactory(GsonConverterFactory.create())//gson解析
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//rxjava
.build();
Api api =retrofit.create(Api.class);
Observable<bean> observable= api.addUser(url,Login_userd对象 );
observable.subscribeOn(Schedulers.io())                 //访问接口时的线程
.unsubscribeOn(AndroidSchedulers.mainThread())  //链接开始前和异常结束的线程选择
.observeOn(AndroidSchedulers.mainThread())      //获取到数据时的线程
.subscribe(new Subscriber(){

});


第二种直接传字符串

/**
* Created by 淼素 on 2016/11/11 0011.
*/

public interface Api {
@POST("login.jhtml")
@Headers({ "Content-Type: application/json;charset=UTF-8"})
Observable<bean> addUser(@Body RequestBody body);
}

RequestBody对象的创建

RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),"你要传递的json字符串");


调用

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MySettings.REQUESTURI)  //主url
.addConverterFactory(GsonConverterFactory.create())//gson解析
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//rxjava
.build();
Api api =retrofit.create(Api.class);
Observable<bean> observable= api.addUser(url,RequestBody 对象 );
observable.subscribeOn(Schedulers.io())                 //访问接口时的线程
.unsubscribeOn(AndroidSchedulers.mainThread())  //链接开始前和异常结束的线程选择
.observeOn(AndroidSchedulers.mainThread())      //获取到数据时的线程
.subscribe(new Subscriber(){

});


调用可以看这篇封装之后的,会很方便
http://blog.csdn.net/qq_21174855/article/details/53259497
技术一般希望大家提出自己的意见.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐