【Android】Retrofit的使用(2)-使用Retrofit提交JSON数据
来源:互联网 发布:武汉软件职业技术学院 编辑:程序博客网 时间:2024/04/28 17:07
在公司的实际项目需求中,我们请求网络接口很多已经脱离简单的post与get方法,采用json的数据格式以流的形式来进行上传,那么怎么用Retrofit去实现呢?
1.首先我们需要创建一个ConverterFactory类,通过它来对请求数据与接收数进行装换
public final class JsonConverterFactory extends Converter.Factory {private JSONObject jsonObject;public static JsonConverterFactory create() { return create(new JSONObject());}private static JsonConverterFactory create(JSONObject jsonObject) {return new JsonConverterFactory(jsonObject);}private JsonConverterFactory(JSONObject jsonObject) {if (jsonObject == null)throw new NullPointerException("json == null");this.jsonObject = jsonObject;}@Overridepublic Converter<ResponseBody, ?> fromResponseBody(Type type, Annotation[] annotations) {return new JsonResponseBodyConverter<>(jsonObject);}@Override public Converter<?, RequestBody> toRequestBody(Type type, Annotation[] annotations) {return new JsonRequestBodyConverter<>(jsonObject);}}
2.JsonRequestBodyConverter类
/** * Created by ccwant on 2016/8/19. */final class JsonRequestBodyConverter<T> implements Converter<T, RequestBody> {private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");private static final Charset UTF_8 = Charset.forName("UTF-8");private JSONObject jsonObject;JsonRequestBodyConverter(JSONObject jsonObject) {this.jsonObject=jsonObject;}@Overridepublic RequestBody convert(T value) throws IOException {Buffer buffer = new Buffer();Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8);Log.d("123","提交数据:"+value.toString());writer.write(value.toString());writer.close();return RequestBody.create(MEDIA_TYPE, buffer.readByteString());}}3.JsonResponseBodyConverter类
/** * Created by ccwant on 2016/8/19. */final class JsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {private JSONObject jsonObject;JsonResponseBodyConverter(JSONObject jsonObject) {}@Overridepublic T convert(ResponseBody value) throws IOException {BufferedReader br=new BufferedReader(value.charStream());String line="";StringBuffer buffer = new StringBuffer();while((line=br.readLine())!=null){buffer.append(line);}//buffer.toString()Log.d("123","接收数据:"+buffer.toString());try {jsonObject=new JSONObject(buffer.toString());} catch (JSONException e) {e.printStackTrace();}return (T)jsonObject;}}4.使用方法
在实例化Retrofit的时候
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url)//传递url .client(client) .addConverterFactory(JsonConverterFactory.create())//添加转换器 .build();
在http的service我们这么写
@POST("login.json")Call<JSONObject> login(@Body JSONObject parmas);
在网络请求的回调方法中
call.enqueue(new Callback<JSONObject>() { @Override public void onResponse(Response<JSONObject> response, Retrofit retrofit) { } @Override public void onFailure(Throwable t) { }});
2 0
- 【Android】Retrofit的使用(2)-使用Retrofit提交JSON数据
- 使用Retrofit通过post提交Json数据
- 使用Retrofit获取JSON数据
- Android开发 Retrofit使用json提交请求服务器
- 【Android】Retrofit的使用(1)-Retrofit介绍
- Retrofit如何提交json数据
- android retrofit的基本使用
- android Retrofit的简单使用
- 【Android】Retrofit 2.0 的使用
- Retrofit使用时获取原始的json
- Android单元测试:使用本地数据测试Retrofit
- 如何通过Retrofit提交Json格式数据
- 如何通过Retrofit提交Json格式数据
- Retrofit的使用(2)
- Android - Retrofit 基础使用
- Android Retrofit 2.0使用
- Android Retrofit使用详解
- Android Retrofit 2.0使用
- java main调试springweb项目
- 网页拨打电话代码
- Android Blog
- ClickOnce部署WinForm程序技巧总结
- 认真学spring官网,很容易找到spring4的jar包下载位置
- 【Android】Retrofit的使用(2)-使用Retrofit提交JSON数据
- php 事务
- Linux下Mongodb安装
- binbinyang-----Glide用在CircleImageView上显示默认图片的问题,以及Glide让imageview自动显示成圆形头像
- ajax的回调函数(done,fail,always)
- Android Volley完全解析(四),带你从源码的角度理解Volley
- openstack在centos7升级后无法重启或关机解决办法
- 单例设计模式实现方式
- 跟着angularjs2官方文档学习(三)