使用retrofit2和rxjava封装网络框架RNet:(一)RNet的使用

来源:互联网 发布:ctnet2025网络重构 编辑:程序博客网 时间:2024/06/17 19:17
妹子我写代码很辛苦/(ㄒoㄒ)/~~ ,转载请注明出处哦~http://blog.csdn.net/u011791526/article/details/73321495
作者: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的源码解析