RoNetwork 简单方便的网络请求框架

RoNetwork 基于 retrofit 2, okhttp 3, gson实现的网络请求框架。

框架主要功能如下
1.Get请求 如http://baidu.com?key=1,同时支持REST请求 如http://baidu.com/1
2.Post请求
3.文件上传/下载 以及进度监听
4.实时打印日志,请求参数等

使用方法

step.1

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
   compile 'com.github.deilsky:RoNetwork:v1.0'
}

step.2 在APP中设置URL

public class App extends Application {
  ………
  @Override
  public void onCreate() {
    super.onCreate();
    Contract contract = Contract.create()
        .service("http://192.168.1.21:8021/api/")//url前缀
        .sources("http://192.168.1.21:8021/")//资源前缀或备用url
        .print(true);//是否打印日志
        RoContract.create(contract);
  }
}

3.普通get/post请求

3.1 service
public interface LoginService {
    @POST("post")
    Call<RoResult<Integer>> post(@Body LoginModel loginModel);
    @POST("get")
    Call<RoResult<String>> get();
}
3.2 接口定义
public interface LoginContract {
    void post(LoginModel loginModel, RoResultListener<Integer> listener);
    void get(RoResultListener<String> listener);
}
3.3 具体请求
public class LoginApi implements LoginContract {
    private LoginService service = null;
    static LoginApi instance;

    private LoginApi() {
        service = RoRetrofit.getInstance().create(LoginService.class);
    }

    public static LoginApi create() {
        instance = new LoginApi();
        return instance;
    }

    @Override
    public void post(LoginModel loginModel, final RoResultListener<Integer> listener) {
        Call<RoResult<Integer>> call = service.post(loginModel);
        listener.onLoading();
        call.enqueue(new Callback<RoResult<Integer>>() {
            @Override
            public void onResponse(Call<RoResult<Integer>> call, Response<RoResult<Integer>> response) {
                new RoResponse<Integer>().formatter(response, listener);
            }
            @Override
            public void onFailure(Call<RoResult<Integer>> call, Throwable t) {
                listener.onError(t.getMessage());
            }
        });
    }
    @Override
    public void get(final RoResultListener<String> listener) {
        Call<RoResult<String>> call = service.get();
        listener.onLoading();
        call.enqueue(new Callback<RoResult<String>>() {
            @Override
            public void onResponse(Call<RoResult<String>> call, Response<RoResult<String>> response) {
                new RoResponse<String>().formatter(response, listener);
            }
            @Override
            public void onFailure(Call<RoResult<String>> call, Throwable t) {
                listener.onError(t.getMessage());
            }
        });
    }
}
3.4 调用get
LoginApi.create().get(new RoResultListener<String>() {
    @Override
    public void onSuccess(RoResult<String> result) {
        if (200 == result.getStatus()) {
            Log.d("GET", result.getData());
        }
    }
    @Override
    public void onLoading() {}
    @Override
    public void onError(String msg) {
        Log.e("onError", msg);
    }
});
3.5 调用post
LoginModel model = new LoginModel();
model.setUserName("admin");
model.setPassWord("123456");
LoginApi.create().post(model, new RoResultListener<Integer>() {
    @Override
    public void onSuccess(RoResult<Integer> result) {
        if (200 == result.getStatus()) {
            Log.d("post", result.getData()+"");
        }
    }
    @Override
    public void onLoading() {}
    @Override
    public void onError(String msg) {
        Log.e("onError", msg);
    }
});

4 文件上传/下载以及进度监听

4.1 service
public interface NetContract {
    interface UploadContract {
        void upload(ArrayList<String> paths, RoUpLoadProgressListener<String> listener);
        void upload(ArrayList<String> paths, RoResultListener<String> listener);
    }
    interface DownLoadContract {
        void download(String path, RoResultListener<ResponseBody> listener);
    }
}
4.2 接口定义
public interface NetService {
    @Multipart
    @POST("upload")
    Call<RoResult<String>> upload(@Part List<MultipartBody.Part> file);
    @GET
    Call<RoResult<ResponseBody>> download(@Url String path);
}
4.3 上传实现
public class UploadApi implements NetContract.UploadContract {
    private NetService service = null;
    public static UploadApi instance;
    private UploadApi() {
        service = RoRetrofit.getInstance().create(NetService.class);
    }

    public static UploadApi create() {
        instance = new UploadApi();
        return instance;
    }
    @Override
    public void upload(ArrayList<String> paths, final RoUpLoadProgressListener<String> listener) {
        MultipartBody.Builder build = new MultipartBody.Builder();
        build.setType(MultipartBody.FORM);
        for (String path : paths) {
            File file = new File(path);
            RequestBody body = new RoRequestBody(RequestBody.create(MediaType.parse("application/zip"),file),listener);
            build.addFormDataPart("upload", file.getPath(), body);
            build.build();
        }
        Call<RoResult<String>> call = service.upload(build.build().parts());
        call.enqueue(new Callback<RoResult<String>>() {
            @Override
            public void onResponse(Call<RoResult<String>> call, Response<RoResult<String>> response) {
                new RoResponse<String>().formatter(response,listener);
            }
            @Override
            public void onFailure(Call<RoResult<String>> call, Throwable t) {
                for (StackTraceElement stackTraceElement : t.getStackTrace()) {
                    listener.onError(stackTraceElement.toString());
                }
            }
        });
    }

    @Override
    public void upload(ArrayList<String> paths, final RoResultListener<String> listener) {
        MultipartBody.Builder build = new MultipartBody.Builder();
        build.setType(MultipartBody.FORM);
        for (String path : paths) {
            File file = new File(path);
            build.addFormDataPart("upload", file.getPath(), RequestBody.create(MediaType.parse("application/zip"),file));
            build.build();
        }
        Call<RoResult<String>> call = service.upload(build.build().parts());
        call.enqueue(new Callback<RoResult<String>>() {
            @Override
            public void onResponse(Call<RoResult<String>> call, Response<RoResult<String>> response) {
                new RoResponse<String>().formatter(response,listener);
            }
            @Override
            public void onFailure(Call<RoResult<String>> call, Throwable t) {
                for (StackTraceElement stackTraceElement : t.getStackTrace()) {
                    listener.onError(stackTraceElement.toString());
                }
            }
        });
    }
}
4.4 下载实现
public class DownLoadApi implements NetContract.DownLoadContract {
    private NetService service = null;
    public static DownLoadApi instance;
    private DownLoadApi() {
        service = RoRetrofit.getOtherInstance().create(NetService.class);
    }
    public static DownLoadApi create() {
        instance = new DownLoadApi();
        return instance;
    }

    @Override
    public void download(String path, final RoResultListener<ResponseBody> listener) {
        Call<RoResult<ResponseBody>> call = service.download(path);
        call.enqueue(new Callback<RoResult<ResponseBody>>() {
            @Override
            public void onResponse(Call<RoResult<ResponseBody>> call, Response<RoResult<ResponseBody>> response) {
                new RoResponse<ResponseBody>().formatter(response, listener);
            }
            @Override
            public void onFailure(Call<RoResult<ResponseBody>> call, Throwable t) {
                for (StackTraceElement stackTraceElement : t.getStackTrace()) {
                    listener.onError(stackTraceElement.toString());
                }
            }
        });
    }
}
4.5 具体调用
//上传文件,无进度
ArrayList<String> paths = new ArrayList<String>();
paths.add("/storage/emulated/0/XX/Cclocation.zip");
paths.add("/storage/emulated/0/snapshot/20170724120021495.jpeg");
UploadApi.create().upload(paths, new RoResultListener<String>() {
    @Override
    public void onSuccess(RoResult<String> result) {
        Log.d("result:",result.toString());
        if (200 == result.getStatus()) {
            for (String s : result.getList()) {
                Log.d("path:", s+"");
            }
        }
    }
    @Override
    public void onLoading() {}
    @Override
    public void onError(String msg) {
        Log.e("onError",msg);
    }
});
//上传文件,有进度
ArrayList<String> paths = new ArrayList<String>();
paths.add("/storage/emulated/0/程序/Cclocation.zip");
paths.add("/storage/emulated/0/snapshot/20170724120021495.jpeg");
UploadApi.create().upload(paths, new RoUpLoadProgressListener<String>() {

    @Override
    public void onProgress(long progress, long size, boolean hasFinish) {
        showProgress(progress, size, hasFinish);
    }

    @Override
    public void onSuccess(RoResult<String> result) {
        Log.d("result:", result.toString());
        if (200 == result.getStatus()) {
            for (String s : result.getList()) {
                Log.d("path:", s + "");
            }
        }
    }
    @Override
    public void onLoading() {}
    @Override
    public void onError(String msg) {
        Log.e("onError", msg);
    }
});
private void showProgress(long progress, long total, final boolean done) {
    final int p = Integer.parseInt(String.format("%1d", (progress * 100 / total)));
    //Log.d("showProgress", "progress:" + progress + "," + total + "," + p);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            progressBar1.setProgress(p);
        }
    });
}
//下载文件
DownLoadApi.create().download("resources/upload/header/e9c8c3f0/7b12/4750/8681/8794badc9407/20171129105444823.zip",
        new RoResultListener<ResponseBody>() {
            @Override
            public void onSuccess(RoResult<ResponseBody> result) {
                Log.d("download", result.toString());
                if (result.getStatus() == 200) {
                    download(result.getData());
                }
            }
            @Override
            public void onLoading() {}
            @Override
            public void onError(String msg) {
                Log.e("download--onError:", msg);
            }
        });
private void download(final ResponseBody data) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            RoDownLoad.writeResponseBodyToDisk(MainActivity.this, data, null, new RoDownLoadProgressListener() {
                @Override
                public void onFinashed(String path) {
                }
                @Override
                public void onError() {}
                @Override
                public void onProgress(long progress, long size) {
                    downloadProgress(progress, size);
                }
                @Override
                public void onReady(long max) {
                }
            });
        }
    }).start();
}
private void downloadProgress(long progress, long total) {
    final int p = Integer.parseInt(String.format("%1d", (progress * 100 / total)));
    //Log.d("showProgress", "progress:" + progress + "," + total + "," + p);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            progressBar2.setProgress(p);
        }
    });
}

传送门

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【归心】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值