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

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

框架主要功能如下
1.Get请求 如http://baidu.com?key=1,同时支持REST请求 如http://baidu.com/1
2.Post请求
3.文件上传/下载 以及进度监听
4.实时打印日志,请求参数等
使用方法
1.
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
   compile 'com.github.deilsky:RoNetwork:v1.0'
}
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);
        }
    });
}

欢迎留言~
传送门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容