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

提前声明这个实践是在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

技术一般希望大家提出自己的意见.

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值