# request **Repository Path**: Pino_W/request ## Basic Information - **Project Name**: request - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-03-11 - **Last Updated**: 2023-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # request Baseandroid 介绍 1. 封装android 常用的基类,比如BaseActivity,BaseFragment,BaseBindingAdapter 2. 以上基类均配合viewbinding使用,无需使用findviewbyId绑定控件 3. 基于okhttp3+RXJAVA+Retrofit+泛型解析 封装网络请求,回调自动切回主线程,无需关注线程切换问题 4. 常用工具类 BaseFileUtil、 控件动态切换背景色BgUtil、 日期转化DateUtil、 线程池ExecutorUtil、 Md5加密 MD5AndSHA1Util、 textview控件部分文本高亮 TextUtil、 RXJAVA轮询定时器、延时器封装 TimerUtil、 Toast简单封装 ToastUtil、 弹窗列表封装 ListDialog、 http使用demo httpDemo #### Gradle的引用方式 请先在'build.gradle(project)'中添加如下代码: ``` allprojects { repositories { ... maven { url 'https://jitpack.io' } } } ``` 在 'build.gradle(app)' 中引入: ``` dependencies { // 万能适配器 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4' implementation 'io.reactivex.rxjava2:rxjava:2.1.12' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' // retrofit+gson converter+日志打印+ok+rxjava适配器 implementation 'com.squareup.retrofit2:retrofit:2.0.2' implementation 'com.squareup.retrofit2:converter-gson:2.0.2' implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1' implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' // 引入依赖 implementation 'com.gitee.Pino_W.request:baseAndroid:v1.0.9' } ``` 依赖完成后,在Application 初始化 ``` public class AppStart extends Application { @Override public void onCreate() { super.onCreate(); BaseConfig.(this); } } ``` #### BaseActivity使用方式 ``` public class MainActivity extends BaseActivity { @Override protected int initLayout() { return R.layout.activity_main; } @Override protected void initView() { } @Override protected void initData() { } @Override protected int[] getClickViews() { return new int[]{R.id.bt_show}; } @Override protected void onSingleClick(View view) { switch (view.getId()){ case R.id.bt_show: ToastUtil.showShort("666666666"); break; } } } ``` #### BaseFragment使用 ``` public class DownLoadIngFrm extends BaseFragment { @Override protected int initLayout() { return R.layout.activity_download_list; } @Override protected void initView() { } @Override protected void initData() { } } ``` #### BaseBindingAdapter使用 ``` public class SearchResult2Adapter extends BaseBindingAdapter { public SearchResult2Adapter( @Nullable List data) { super(R.layout.magnet_item, data); } @Override protected void convert(@NotNull BaseVBViewHolder helper, String item) { helper.bd.tvName.setText(item); } } ``` #### 网络请求-支持切换不同base_url,一个url对应一个Retrofit单例.支持动态url ``` // 单例1 public static RetrofitApi getMainRetrofitApi(){ return RetrofitFactory.getRetrofitService(RetrofitApi.class,BASE_URL); } // 单例2 public static RetrofitApi getNextRetrofitApi() { return RetrofitFactory.getRetrofitService(RetrofitApi.class,BASE_URL_2); } // 单例3-自定义请求头 public static RetrofitApi getHibtRetrofitInstance() { Mapheaders=new HashMap<>(); headers.put("content-type","application/x-www-form-urlencoded"); headers.put("Host","www.hibt.net"); headers.put("Cookie","Cookie"); return RetrofitFactory.getRetrofitService(RetrofitApi.class,BASE_URL,headers); } // 动态url public static RetrofitApi getMyRetrofitApi(String base_url) { return RetrofitFactory.getRetrofitService(RetrofitApi.class,base_url); } ``` #### 普通的get、post请求 ``` public static void doGet(){ Observable> observable = HttpRequest.getMainRetrofitApi().getDataByGet("r","api","key"); RetrofitFactory.request(observable, res -> { if(res==null) return; }); } public static void doPost(){ Mapmap=new HashMap<>(); Observable> observable = HttpRequest.getMainRetrofitApi().getDataByPost(map); RetrofitFactory.request(observable, res -> { if(res==null) return; }); } ``` #### 上传单文件、多文件 ``` // 多文件+文本混合 public static void uploadFile(List filePaths){ MultipartBody.Builder builder = new MultipartBody.Builder() // 表单类型 .setType(MultipartBody.FORM) .addFormDataPart("token","tokenData"); int index=0; for (String filePath : filePaths) { index++; File file = new File(filePath); RequestBody imageBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); builder.addFormDataPart("file_"+index, file.getName(), imageBody); } List parts = builder.build().parts(); Observable> observable = HttpRequest.getMainRetrofitApi().uploadFile(parts); RetrofitFactory.request(observable, res -> { if(res==null) return; }); } // 单文件+文本混合 public static void uploadFile2(String filePath){ File mFile=new File(filePath); MultipartBody.Part fileBody=MultipartBody.Part.createFormData("file", mFile.getName(),RequestBody.create(null, mFile)); RequestBody formTextBody=RequestBody.create(MediaType.parse("text/plain"), "tokenData"); Observable> observable = HttpRequest.getMainRetrofitApi().uploadFile2(formTextBody,fileBody); RetrofitFactory.request(observable, res -> { if(res==null) return; }); } ``` #### 下载文件,并回调进度和结果 ``` // downloadFile方法 可参考HttpRequest的实现 String path= Environment.getStorageDirectory().getAbsolutePath()+ File.separator; HttpRequest.downloadFile(path, "test.txt", new OnDownloadCallback() { @Override public void onDownloading(int progress) { } @Override public void onDownSuccess(String filePath) { } @Override public void onDownFailed(Exception e) { } }); ```