Regrofit 网络请求库学习记录
来源:互联网 发布:爱的算法 pdf 编辑:程序博客网 时间:2024/06/07 15:01
1 添加依赖(看了半天 没几个文章写依赖的地址,最后去github才看到)
compile 'com.squareup.retrofit2:retrofit:2.1.0'
github地址 : https://github.com/square/retrofit2 简单实现一个返回String的示例
首先是服务器 : 定义一个接口,就是反回一个 "hello world" 的文本,路径是"http://192.168.10.117:8081/test.txt"
手机中 : 先定义一个接口
public interface HttpService { @GET("test.txt") Call<String> getMessage(@Query("testParam") String testParam); }其中, getMessage方法对应服务器的test.txt的接口地址相对路径,这个HttpService里边可以定义多个方法,分别对应不同的服务器接口;
@GET("test.txt") : 表示get方法请求,里边的"test.txt"为绝对路径 ; 其他的还有@POST @PUT 等..
@Query("testParams") : 表示上传的参数 key就是testParams ,value就是传入的值; 这里写上了只为学习,没什么用,因为服务器没有接受参数;
然后, 创建一个Retrofit对象
public static final Retrofit stringClient = new Retrofit.Builder().baseUrl("http://192.168.10.117:8081/") .addConverterFactory(new Converter.Factory() { public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { return new Converter<ResponseBody, Object>() { public String convert(ResponseBody value) throws IOException { return value.string(); } }; } }).build();这里主要就是addConvertFactory方法,是一个转换,参数需要一个Converter.Factory对象,这个Converter.Factory是一个抽象类,里边有三个方法可以重写,这里只重写responseBodyConverter方法,表示将服务器反回的数据转换成什么,这里仅仅是转换成了String来对应HttpService的Call<String>的这个泛型返回值,网上看的都是使用GsonConverterFactory直接转换成对象;
然后就万事俱备,可以请求服务器了,这里请求服务器和OKHttp差不多,有同步和异步两种方式,这里展示一下异步的方式
HttpService service = stringClient.create(HttpService.class); Call<String> call = service.getMessage("我是没用的测试参数"); call.enqueue(new Callback<String>() { public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful()) { String bodyString = response.body(); Toast.makeText(RetrofitActivity.this, bodyString, Toast.LENGTH_SHORT).show(); } else { onFailure(call, null); } } public void onFailure(Call<String> call, Throwable t) { String msg = (t==null)?"" : t.getLocalizedMessage(); Toast.makeText(RetrofitActivity.this, "error"+t, Toast.LENGTH_SHORT).show(); } });
@Path 注解 , 表示参数作为url路径的一部分 , 如果下面的path参数传递的是"hello" ,baseUrl是http://a.com/ , 那么完整路径就是 http://a.com/hello/get
@GET("{test}/get") Call<String> getMessage2(@Path("test") String path);
感觉这东西如果不是restful风格的url, 还不如直接用okhttp自己封装, 哪有说的那么好;
1 0
- Regrofit 网络请求库学习记录
- Android 学习记录-网络请求
- 为自己记----android开发学习记录之网络请求
- Android学习之网络请求库Volley
- Android学习之网络请求库Retrofit2
- ios学习--网络请求
- Android学习--网络请求
- Retrofit 网络请求学习
- vue学习-网络请求
- 网络流学习记录
- 基础网络学习记录
- 网络流学习记录
- 网络流学习记录
- 记录网络请求清楚缓存方法
- Volley请求网络简单学习
- Android学习 各大网络请求库的比较
- Chromium网络栈学习记录
- 学习记录 有关 网络动力学
- oc学习之类与对象
- 静态链接中库的次序
- 排序算法之合并排序
- transform-style ~ animation (css3星环运动)
- 14.怎么使用uvision3编译得到.hex文件(原创)
- Regrofit 网络请求库学习记录
- 第六章 使用网络技术
- 《Nodejs开发加密货币》之二十五:函数式编程入门经典
- LINQ TO SQL批量查找
- iOS黑魔法之Method Swizzling
- eclipse去除所有调试断点
- cc2541 硬件i2c 读AT24CM01
- phpcms-ajax加载新闻列表
- C,C++,VC, VC++,MFC有什么区别?