使用retrofit2和rxjava封装网络框架RNet:(一)RNet的使用
来源:互联网 发布:ctnet2025网络重构 编辑:程序博客网 时间:2024/06/17 19:17
作者:catRuan(阮妹子)
联系方式:QQ:940472401 邮箱:940472401@qq.com
一、什么是RNet?
RNet是基于retrofit2和rxjava封装的一个网络请求框架。
本项目Github地址:https://github.com/CatRuan/RnetDemo
二、RNet的基本功能
①、get请求
②、post请求
③、文件下载(不进度条)
④、文件下载(带进度)
⑤、Header的统一添加
⑥、网络返回预处理
⑦、会话保持(即cookie/session的自动化管理)
⑧、HTTPS信任模式
⑨、加载页选择显示和自动隐藏
⑩、取消网络请求
三、待添加的功能
①、文件上传
②、以比较优雅的方式取消网络请求
四、RNet使用
Rnet的引用: android stuodio app的build.gradle中添加 compile 'com.rd:rnet:1.0'
最新版:compile 'com.rd:rnet:2.0.0'
eclipse sorry暂时不提供下载jar包
最新版本: 2.0.0(移除fastjson作为默认解析工具,改用Gson)
Rnet在代码里的使用(以2.0.0为例):
①、一RNet的初始化,建议在application中进行
public class MyApplication extends Application { private HashMap<String, String> mHeaders; private static final String BASE_URL = "https://github.com/"; public static RNet mRNet; public static NetService mNetService; private static MyApplication mApp; @Override public void onCreate() { super.onCreate(); mApp = this; initNetWork(); } private void initNetWork() { mHeaders = new HashMap<>();// mHeaders.put("Content-Type", "application/json;encoding-utf-8");// mHeaders.put("Accept", "application/json"); mRNet = RNet.getInstance(this, BASE_URL, mHeaders, false); mNetService = mRNet.create(NetService.class); } public static MyApplication getInstance() { return mApp; } public RNet getRNet() { return mRNet; } public NetService getNetService() { return mNetService; }}
②、编写网络请求接口,这里以post、带进度的下载和不带进度的下载为例子
public interface NetService { @POST("http://v.juhe.cn/weather/forecast3h") Observable<BaseResponse<RealResponse>> getPost(@Body RequestBody request); @Streaming @GET("http://v1.qzone.cc/pic/201303/28/14/53/5153e8d11f4bf030.jpg!600x600.jpg") Observable<Response<ResponseBody>> download();//直接使用网址下载 @Streaming @GET("http://dldir1.qq.com/qqfile/qq/QQ8.9.2/20760/QQ8.9.2.exe") Observable<Response<ResponseBody>> downloadPro();//直接使用网址下载}
③执行网络请求
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mBtnDownload; private Button mBnDownLoadPro; private Button mBtnPost; private RNet mRNet; private NetService mNetService; private ProgressDialog mProgressDialog;//进度窗口 public static final String SD_PATH = Environment.getExternalStorageDirectory() + "/";// private Subscription mDownloadSubscription; private Subscription mDownloadProSubscription; private Subscription mPostSubscription; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRNet = MyApplication.getInstance().getRNet(); mNetService = MyApplication.getInstance().getNetService(); initView(); } …… @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnDownload: downLoad(); break; case R.id.btnDownLoadPro: downloadPro(); break; case R.id.btnPost: post(); break; } } /** * 文件下载,不带进度。适合小文件,如图片 */ private void downLoad() { Observable<Response<ResponseBody>> observable = mNetService.download(); FileCallBack fileCallBack = new FileCallBack(SD_PATH, "test.jpg") { @Override public void onSuccess() { Toast.makeText(MainActivity.this, "下载文件成功", Toast.LENGTH_SHORT).show(); } @Override public void onFail(String msg) { Toast.makeText(MainActivity.this, "下载失败:" + msg, Toast.LENGTH_SHORT).show(); } }; mRNet.showLoadingDialog(this); mDownloadSubscription = mRNet.download(getApplication(), observable, fileCallBack); } /** * 文件下载,带进度。适合大文件 */ private void downloadPro() { Observable<Response<ResponseBody>> observable = mNetService.downloadPro(); FileProgressCallBack fileCallBack = new FileProgressCallBack(SD_PATH, "test.apk") { @Override public void progress(long progress, long total) { mProgressDialog.setMax((int) total / 1024 / 1024); mProgressDialog.setProgress((int) progress / 1024 / 1024); } @Override public void onStart() { mProgressDialog = new ProgressDialog(MainActivity.this); mProgressDialog.setTitle("下载中……"); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.show(); } @Override public void onCompleted() { } @Override public void onSuccess() { Toast.makeText(MainActivity.this, "下载文件成功", Toast.LENGTH_SHORT).show(); mProgressDialog.dismiss(); } @Override public void onFail(String msg) { Toast.makeText(MainActivity.this, "下载失败:" + msg, Toast.LENGTH_SHORT).show(); mProgressDialog.dismiss(); } }; mDownloadProSubscription = mRNet.downloadWithProgress(getApplication(), observable, fileCallBack); } /** * post请求 */ private void post() { Request request = new Request(186878, "f5058990ccbfcfdfc3fcef8de72c6981", "json"); Gson gson = new Gson(); String jsonStr = gson.toJson(request); Observable<BaseResponse<RealResponse>> observable = mNetService .getPost(RequestBody.create(MediaType.parse("application/json"), jsonStr)); NetCallback<BaseResponse<RealResponse>> netCallback = new NetCallback<BaseResponse<RealResponse>>(getApplication()) { @Override public void onSuccess(BaseResponse<RealResponse> response) { String msg = response.getResultcode(); Toast.makeText(MainActivity.this, "请求成功:code ->" + msg, Toast.LENGTH_SHORT).show(); } @Override public void onFail(String message) { Toast.makeText(MainActivity.this, "请求失败:" + message, Toast.LENGTH_SHORT).show(); } }; mRNet.showLoadingDialog(this); mPostSubscription = mRNet.post(observable, netCallback); } @Override protected void onPause() { super.onPause(); /** * cancel request */ mRNet.cancelRequest(mDownloadSubscription); mRNet.cancelRequest(mDownloadProSubscription); mRNet.cancelRequest(mPostSubscription); }}
Rnet的使用暂时这么多吧,麻雀虽小,功能也算齐全。
了解源码,可以阅读我的另外一篇文章 使用retrofit2和rxjava封装的网络框架RNet:(二)RNet的源码解析
- 使用retrofit2和rxjava封装网络框架RNet:(一)RNet的使用
- 使用retrofit2和rxjava封装的网络框架RNet:(二)RNet的源码解析
- Retrofit2网络框架的使用(一)
- Android 网络框架 Retrofit2.0介绍、使用和封装
- Android 网络框架 Retrofit2.0介绍、使用和封装
- Retrofit2网络框架的使用
- Android框架学习之Retrofit(二)RxJava和Retrofit2.0的结合使用
- RxJava和Retrofit2.0的结合使用
- retrofit2+rxjava的结合使用
- Retrofit2与RxJava的使用
- RxJava2+Retrofit2网络请求框架封装及使用
- 清晰的MVP-封装 Retrofit2+Rxjava+Lamda+dagger2(可直接使用)
- retrofit2+okhttp3+rxjava网络封装
- 如何使用retrofit2网络框架
- Android RxJava和Retrofit网络框架封装(一)
- (一)RxJava在Android网络框架中的使用
- retrofit2+RxJava简单使用
- Retrofit2+Rxjava2网络请求框架的封装
- 由一道高考题而想到的
- eclipse取消警告符号
- ASP.NET 部署和使用自定义 Web 服务器控件
- 决策树算法--python实现
- Mysql 出现Got error 28 from storage engine 解决方法
- 使用retrofit2和rxjava封装网络框架RNet:(一)RNet的使用
- learning tensorflow
- 读懂JNDI
- centOS 6.5 Nginx 配置开机启动
- PHP安全编程:网站安全设计的一些原则
- IntelliJ idea 快捷键 eclipse快捷键部分对照表
- SM37 job状态意义
- 在 VS 中调试 Qt 源码
- 正则表达式学习笔记