Retrofit2+RxJava+Okhttp学习笔记
来源:互联网 发布:房产系统源码 编辑:程序博客网 时间:2024/05/24 03:19
刚刚上班,公司的事情不多,就决定多学习点东西,在掘金上发现去年一年最流行的网络框架则是Retrofit2+RxJava+Okhttp3,突然觉得自己Out了,于是开始了学习,对自己的学习心得给大家分享。
一看这个框架,发现自己平日里除了用了Okhttp其它两个在此之前并没有任何了解,于是我第一反应就是去学习Retrofit2关于Retrofit2的学习心得如下:
Retrofit 使用方法
1.首先第一步呢,必须得在androidMianifest.xml中请求了网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.第二步,在androidStduio的app/bulid.grade中添加如下:
compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:converter-gson:2.1.0'compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'compile 'io.reactivex:rxjava:1.1.5'compile 'io.reactivex:rxandroid:1.2.0'
3.第三步,创建retrofit,和获取请求类
/** * 第一步创建okHttpClient */private static OkHttpClient getHttpClient() { okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(5, TimeUnit.SECONDS); builder.writeTimeout(5, TimeUnit.SECONDS); builder.readTimeout(5, TimeUnit.SECONDS); builder.cache(new Cache(MyApplation.getInstance().getExternalCacheDir(), 10 * 1024 * 1024)); builder.addInterceptor(new LoggerInterceptor("HttpUtil")); builder.addNetworkInterceptor(getInterceptor()); HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null); builder.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager); return builder.build();}/** * 第二步创建Retrofit */private static Retrofit getRetrofit() { Retrofit retrofit = new Retrofit.Builder() .client(getHttpClient()) .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build(); return retrofit;}
如上面代码所示的,Retrofit中有个client可以添加一个自己自定义的okhttpClient。如上。
4.第四步:创建数据请求接口类ApiRequest,这个就相对比较复杂,对于我自己的在这上面的研究。
对于这个接口的定义,废话步多数,我先举个举个例子
@Query,@QueryMap:查询参数,用于GET查询,需要注意的是@QueryMap可以约定的是否需要encode
/** * query用于get请求中拼接在baseUrl+get里面的参数后的参数 */@GET("group/users")Call<RequestBody> getGroupList(@Query("id") int groupId);//-->http:baseUrl/group/users?id=group@GET("group/users")Call<RequestBody> getNews(@QueryMap(encoded = true) Map<String,Object> options);
@Filed,@FiledMap:Post方式传递简单的键值对,需要添加@FormUrlEncoded表示提交
Content-Type:application/x.www.form.urlencoded
@FormUrlEncoded@POST("user/edit")Call<RequestBody> login(@Field("username")String username, @Field("password") String password);/*post请求*/@FormUrlEncoded@POST("{url}")Call<ResponseBody> sendPost(@Path("url") String url, @FieldMap Map<String, Object> params);
@HTTP:可以替代其他方法的任意一种
/** * method 表示请求方法,不区分大小写 * path 表示路径 * hasBody表示是否有请求体 */@HTTP(method = "get",path = "{url}",hasBody = false)Call<ResponseBody> getFirstBolg(@Path("url") String url);
@Streaming:用于下载大文件
/*下载文件*/@Streaming@GETCall<ResponseBody> downloadFile(@Url String fileUrl);
@Path:URL占位符,用于替换和动态更新,相应的参数必须使用相同的字符被@Path替换
@GET("group/{id}/user") Call<ResponseBody> getGroupList(@Path("id") int groupId); //--> http://baseurl/group/groupId/users //等同于 Call<ResponseBody> groupListUrl(@Url String url)
@Header:header处理,不能被 互相覆盖,用于修饰参数
//动态设置Header @GET("widget/lis") Call<ResponseBody> getuser(@Header("Authorization") String authorization); 等同于//静态设置Header的值 @Headers("Authorization:authorization") @GET("widget/list") Call<RequestBody> getuser();
如上所用,定义接口方式。
5.第五步 向服务器发送请求
Retrofit retrofit = getRetrofit();ApiRequest request = retrofit.create(ApiRequest.class);Call<RequestBody> call = request.getinfo("jack");//异步call.enqueue(new Callback<RequestBody>() { @Override public void onResponse(Call<RequestBody> call, retrofit2.Response<RequestBody> response) { Log.i(TAG,response.body().toString()); } @Override public void onFailure(Call<RequestBody> call, Throwable t) { Log.i(TAG,t.toString()); }});// 同步call.execute();
这样就完成一个完整的框架搭建啦。
那么如果加上rxJava该怎么写呢,启示前三步差不多,从第四步开始改变
加上Rxjava那么如下:
4.第四步创建接口类写响应的请求方式以post方式举个例子:
/*post请求*/@FormUrlEncoded@POST("{url}")Observable<ResponseBody> sendPost(@Path("url") String url, @FieldMap Map<String, Object> params);
相比前面的接口定义方式,只改变了返回参数类型,这个方式比通用的请求,前面的url可以替代整个项目的任何一个post:url,后面则是通用的请求参数。
5.第五步 向服务器发送请求
/** * post请求获取数据 * @param params 请求的参数列表 * @param url 接口的url地址 * @param listener 监听回调 */public static void sendPost(Map<String, Object> params,final Type type, final String url, final HttpListener listener) { ApiRequest request = getApiRequest(); Observable<ResponseBody> observable = request.sendPost(url,params); observable.subscribeOn(Schedulers.io()). observeOn(AndroidSchedulers.mainThread()). unsubscribeOn(Schedulers.io()). subscribe(new Subscriber<ResponseBody>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { listener.onError(url, (String) new Gson().fromJson(e.getMessage(),new TypeToken<main.gooleplay.network.Result<String>>(){}.getType())); } @Override public void onNext(ResponseBody responseBody) { try { Log.e("HttpUtil", "content :" + responseBody.string()); listener.onSuccess(url, new Gson().fromJson(responseBody.toString(),type)); } catch (IOException e) { listener.onSuccess(url, new Gson().fromJson(e.getMessage(),new TypeToken<main.gooleplay.network.Result<String>>(){}.getType())); e.printStackTrace(); } } });}
0 0
- Retrofit2+RxJava+Okhttp学习笔记
- Rxjava+retrofit2+OKHttp+GSON实践
- 网络请求篇--Retrofit2.0+RxJava+OkHttp
- Android Okhttp+Retrofit2.0+RxJava简单解析
- Retrofit2+Rxjava学习到封装
- Android中okHttp+retrofit2.0+RxJava的使用
- Retrofit2+RxJava+OkHttp项目直接使用(简单快捷)
- Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据
- RxJava学习笔记2:基于RxJava+okHttp的Rest Cas登录实现
- Retrofit2+RxJava
- retrofit2+rxJava
- RXJava+retrofit2
- RxJava前奏之Retrofit2.0的学习
- Retrofit2的学习笔记
- Retrofit2.1.0 学习笔记
- retrofit2学习笔记
- Retrofit2学习笔记-1
- retrofit2.3.0 学习笔记
- 解决数据结构未对齐的异常
- mysql-bin.000001文件的来源及处理方法
- Java多线程交替输出01010......
- vue--点击当前增加class,其他删除class
- unity的GUI
- Retrofit2+RxJava+Okhttp学习笔记
- linux下boost的一个扩展线程池-threadpool-的学习
- 每天一个Linux命令(3):pwd命令------学习笔记
- Eclipse 不能正确识别Android工程
- vb.net Linq实战
- python数据结构之图深度优先和广度优先
- 目标检测的图像特征提取之(二)LBP特征
- android: 调用摄像头拍照
- delphi字符unicode编码后与webservice通过json通讯