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

妹子我写代码很辛苦/(ㄒoㄒ)/~~ ,转载请注明出处哦~http://blog.csdn.net/u011791526/article/details/73321495
作者:catRuan(阮妹子)

联系方式:QQ:940472401 邮箱:[email protected]


一、什么是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的源码解析

猜你喜欢

转载自blog.csdn.net/u011791526/article/details/73321495