结合retrofit和rxJava 的 Novate第三方的使用

https://github.com/Tamicer/Novate

 repositories {
      maven { url "https://jitpack.io" }
      jcenter()
  }
dependencies {
             compile 'com.tamic.novate:novate:1.5.2.3'

         }

1,在oncreate中初始化进度条 ,这样在上传或者下载数据的时候,会显示进度

 /**
     * 初始化进度条
     */
    private void initProgress(Context aContext) {

        if (mProgressDialog == null) {
            mProgressDialog = new ProgressDialog(aContext);
        }

        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        mProgressDialog.setTitle("温馨提示");
        mProgressDialog.setMax(100);
        mProgressDialog.setMessage("正在上传中...");
        mProgressDialog.setCancelable(true);

    }


    private void showPressDialog() {

        if (mProgressDialog == null || this.isFinishing()) {
            return;
        }
        mProgressDialog.show();
    }


    private void dismissProgressDialog() {
        if (mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        }
    }

    private void updateProgressDialog(int progress) {

        if (mProgressDialog != null) {
            if (!mProgressDialog.isShowing()) {
                showPressDialog();
            }
            mProgressDialog.setProgress(progress);
        }
    }

2,get和post请求
 
private void performPost() {

        Map<String, Object> parameters = new HashMap<>();
        parameters.put("ip", "21.22.11.33");
        novate = new Novate.Builder(this)
                .connectTimeout(8)
                .baseUrl(baseUrl)
                //.addApiManager(ApiManager.class)
                .addLog(true)
                .build();


        /**
         *
         *
         * 调用post需要你自己解析数据
         *
         * 如果需要解析后返回 则调用novate.executeGet()
         * 参考 performGet()中的方式
         */
        novate.post("service/getIpInfo.php", parameters, new MyBaseSubscriber<ResponseBody>(ExempleActivity.this) {
            @Override
            public void onError(Throwable e) {
                if (!TextUtils.isEmpty(e.getMessage())) {
                    Log.e("OkHttp", e.getMessage());
                    Toast.makeText(ExempleActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }

            }

            @Override
            public void onNext(ResponseBody responseBody) {

                try {
                    
                             String json = new String(responseBody.bytes());

                            System.out.println("------------jstr"+json);

                            if (json.trim().isEmpty()) {
                                return;
                            }

                            haha haha = JSON.parseObject(json, haha.class);
                            System.out.println("----------haha"+haha.getRows());


} catch (IOException e) { e.printStackTrace(); } } }); } 3,自定义的MyBaseSubscriber 里面,定义了一个进度条,这样在请求数据的时候,会显示正在加载中
 
public abstract class MyBaseSubscriber<T>  extends BaseSubscriber<T> {

    private ProgressDialog progress;

    private Context context;

    public MyBaseSubscriber(Context context) {
        super(context);
        this.context = context;
        progress = new ProgressDialog(context);
        progress.setMessage("novate拼命加载中....");

    }


    @Override
    public void onStart() {
        super.onStart();

        if (!NetworkUtil.isNetworkAvailable(context)) {
            Toast.makeText( context, "似乎没网O",Toast.LENGTH_SHORT).show();
            onCompleted();
            return;
        }
        if (progress != null){
            if (progress.isShowing()) {
                progress.dismiss();
            }
            progress.show();
        }


    }

    @Override
    public void onCompleted() {
        super.onCompleted();

        if (progress != null && progress.isShowing()) {
            progress.dismiss();
        }
    }
}



4,如果要想将对象实例化 ,需要创建API接口
 
public interface MyAPI {

    @POST("user/register")
    Observable<SouguBean> getSougu(@QueryMap Map<String, Object> maps);

    @GET("{url}")
    Observable<ResponseBody>getWeatherStr(@Path("url") String url,
                                          @QueryMap Map<String, String> maps);
}

public class SouguBean {
    private String code;
    private Data data;
    private String message;
    private boolean success;}
private void netPost() {
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("username", "zhansa");
        parameters.put("password", "12313");
        novate = new Novate.Builder(this)
                .connectTimeout(8)
                .baseUrl(baseUrl)
                //.addApiManager(ApiManager.class)
                .addLog(true)
                .build();

        MyAPI myAPI = novate.create(MyAPI.class);
        novate.call(myAPI.getSougu(parameters), new MyBaseSubscriber<SouguBean>(MainActivity.this) {
            @Override
            public void onNext(SouguBean souguBean) {
                Toast.makeText(MainActivity.this, souguBean.toString(), Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onError(Throwable e) {
                Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }


5,上传照片,并显示进度
 
 /**
     * upload
     */
    private void performUpLoadImage() {

        String mPath = uploadPath; //"you File path ";
        String url = "";
        RequestBody requestFile =
                RequestBody.create(MediaType.parse("image/jpg"), new File(mPath));

        final NovateRequestBody requestBody = Utils.createNovateRequestBody(requestFile, new UpLoadCallback() {
            @Override
            public void onProgress(Object tag, int progress, long speed, boolean done) {
                LogWraper.d("uplaod", "tag:" + tag.toString() + "progress:"+ progress);
                updateProgressDialog(progress);
            }
        });

        novate.rxUploadWithBody(url, requestBody, new RxStringCallback() {
            @Override
            public void onStart(Object tag) {
                super.onStart(tag);
                showPressDialog();
            }
            @Override
            public void onNext(Object tag, String response) {
                LogWraper.d("novate", response);
                Toast.makeText(ExempleActivity.this, "成功", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onError(Object tag, Throwable e) {
                Toast.makeText(ExempleActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                dismissProgressDialog();
            }
            @Override
            public void onCancel(Object tag, Throwable e) {
            }

            @Override
            public void onCompleted(Object tag) {
                super.onCompleted(tag);
                dismissProgressDialog();
            }
        });

    }

6,上传file 并显示进度
 
 /**
     * upload
     */
    private void performUpLoadFlie() {

        String mPath = uploadPath; //"you File path ";
        String url = "";
        File file = new File(mPath);
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data; charset=utf-8"), file);

        final NovateRequestBody requestBody = Utils.createNovateRequestBody(requestFile, new UpLoadCallback() {

            @Override
            public void onProgress(Object tag, int progress, long speed, boolean done) {
                LogWraper.d("uplaod", "tag:" + tag.toString() + "progress:"+ progress);
                updateProgressDialog(progress);
            }
        });

        MultipartBody.Part body2 =
                MultipartBody.Part.createFormData("image", file.getName(), requestBody);

        novate.rxUploadWithPart(url, body2, new RxStringCallback() {
            @Override
            public void onStart(Object tag) {
                super.onStart(tag);
                showPressDialog();
            }
            @Override
            public void onError(Object tag, Throwable e) {
                Toast.makeText(ExempleActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                dismissProgressDialog();
            }
            @Override
            public void onCancel(Object tag, Throwable e) {
            }
            @Override
            public void onNext(Object tag, String response) {
                LogWraper.d(response);
                Toast.makeText(ExempleActivity.this, "成功", Toast.LENGTH_SHORT).show();
                dismissProgressDialog();
            }
        });

    }
7,下载图片或者text 显示进度条
 
 private Map<String, Object> parameters = new HashMap<String, Object>();
    private Map<String, String> headers = new HashMap<>();
    private void performDownMin() {
        parameters.put("ip", "21.22.11.33");
        headers.put("Accept", "application/json");

        novate = new Novate.Builder(this)
                //.addParameters(parameters)
                .connectTimeout(20)
                .writeTimeout(15)
                .baseUrl(baseUrl)
                .addHeader(headers)
                .addCache(true)
                .addLog(true)
                .build();
        String downUrl = "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
        novate.downloadMin("tag", downUrl, "my.jpg",new DownLoadCallBack() {

            @Override
            public void onStart(String s) {
                super.onStart(s);
//                mb.setText("DownLoadMin cancel");
                showPressDialog();
            }

            @Override
            public void onError(Throwable e) {
                Toast.makeText(MainActivity.this,  "onError:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSucess(String key, String path, String name, long fileSize) {
//                btn_download.setText("DownLoad start");
                uploadPath = path + name;
                dismissProgressDialog();
            }


            @Override
            public void onProgress(String key, int progress, long fileSizeDownloaded, long totalSize) {
                super.onProgress(key, progress, fileSizeDownloaded, totalSize);
                updateProgressDialog(progress);
                Toast.makeText(MainActivity.this, "progress: " + progress + "  download: " + fileSizeDownloaded, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancel() {
                super.onCancel();
//                btn_download.setText("DownLoadMin start");
            }

        });
    }

8,下载file或者视频 显示进度
 
private Map<String, Object> parameters = new HashMap<String, Object>();
    private Map<String, String> headers = new HashMap<>();
    /**
     * performDown file
     * ex: apk , video...
     */
    private void performDown() {

        parameters.put("ip", "21.22.11.33");
        headers.put("Accept", "application/json");

        novate = new Novate.Builder(this)
                //.addParameters(parameters)
                .connectTimeout(20)
                .writeTimeout(15)
                .baseUrl(baseUrl)
                .addHeader(headers)
                .addCache(true)
                .addLog(true)
                .build();

        String downUrl = "http://wifiapi02.51y5.net/wifiapi/rd.do?f=wk00003&b=gwanz02&rurl=http%3A%2F%2Fdl.lianwifi.com%2Fdownload%2Fandroid%2FWifiKey-3091-guanwang.apk";
        novate.download(downUrl, "test.mei",  new DownLoadCallBack() {

            @Override
            public void onStart(String s) {
                super.onStart(s);

                btn_download.setText("DownLoad cancel");
                showPressDialog();
            }

            @Override
            public void onError(Throwable e) {
                Toast.makeText(ExempleActivity.this,  "onError:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onProgress(String key, int progress, long fileSizeDownloaded, long totalSize) {
                super.onProgress(key, progress, fileSizeDownloaded, totalSize);
                Log.v("test", fileSizeDownloaded+"");
                //Toast.makeText(ExempleActivity.this, "progress: " + progress + "   download: " + fileSizeDownloaded, Toast.LENGTH_SHORT).show();
                updateProgressDialog(progress);

            }

            @Override
            public void onSucess(String key, String path, String name, long fileSize) {
                Toast.makeText(ExempleActivity.this, "download  onSucess", Toast.LENGTH_SHORT).show();
                dismissProgressDialog();
            }

            @Override
            public void onCancel() {
                super.onCancel();
                dismissProgressDialog();
            }

        });
    }





 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值