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 listRepos(@Url String url,@FieldMap Map params);
 
  
      @POST("login.jhtml")
      @Headers({ "Content-Type: application/json;charset=UTF-8"})
      Observable 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 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 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 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

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

你可能感兴趣的:(Android)