抽取的Android公共庫

閒來無事抽取了一個無關業務的公共庫以備以後快速開發,此庫還不太完善,還需不斷改善

使用 Blankj大神的部分工具類
項目地址github
經測試,目前module導入項目中打包會增加apk 1.34M體積

此庫目前包含有
  • 網絡請求
  • 圖片加載
  • 文件下載
  • 下載進度
  • 權限安全操作
  • 圖片預覽
  • 三方分享&登錄
  • 網頁加載
每個功能組件都有默認實現,helper爲入口,直接調用使用,使用接口暴露出服務,所以在更換底層框架時重新實現服務接口即可。
  • 網絡請求部分默認使用Okhttp,Retrofit,RxJava實現
  • 圖片使用Glide
  • 權限使用RxPermission
  • 圖片預覽類今日頭條效果,是個完整的組件
  • 三方分享,登錄組件使用友盟

依賴步驟

沒有將module打爲aar文件,因爲這樣需要改代碼方便很多,本來也是一個公共庫組件,以module形式依賴感覺更好。
1. 去github下載完整代碼,包含commonlibrary和demo
2. Android Studio中File -> New -> Import Module選擇下載的路徑,選擇commonlibrary文件夾然後finish,這時會報錯,別慌張,按着下述步驟來。
3. 將下載項目中的dependencies.gradle文件複製到項目的根目錄,然後在根目錄的build.gradle裏按位置添加
apply from: "dependencies.gradle"
classpath 'me.tatarka:gradle-retrolambda:3.6.1'
maven { url "https://jitpack.io" }
這裏寫圖片描述
然後點擊Sync Now然後等着下載所需資源,下載完後應該就不會報錯了,如果還有報錯請聯繫我

4.在你的項目build.gradle中添加implementation project(':commonlibrary')
這裏寫圖片描述
完成導入

示例代碼
  • 請求接口
    可在請求前全局設置網絡請求結果的轉換器,NetworkHelper.getDefault().setConvert(INetworkResultConvert convert);默認爲json轉實體類,可自行實現INetworkResultConvert接口,設置你想要的轉換器,xml轉換之類的。
Params params = new Params();
params.param("start", start);
params.param("count", count);
NetworkHelper.getDefault().get(mView, "v2/movie/top250", params, new DefaultResponseCallBack<String>() {
            @Override
            public void success(String result) {
                mView.requestMovieSuccess(result);
            }

            @Override
            public void onStart(IView view) {
                //設置加載框可否取消
                view.showLoading(true);
            }
        });
  • 下載文件
NeedWifiOperate.getDefault().networkTypeShouldBeWifi(new DefaultNetworkTypeCallBack(this) {
            @Override
            public void wifi(int netType) {
                downloadFile();
            }
        }.setDialogOperateListener(new DialogOperateAdapter() {
            @Override
            public void positive(Context context, Dialog dialog) {
                downloadFile();
            }
        }));

private void downloadFile() {
        File file = new File(CommonApplication.context.getCacheDir(), System.currentTimeMillis() + ".apk");
        DownloadFile downloadFile = new DownloadFile("http://gdown.baidu.com/data/wisegame/13095bef5973a891/QQ_786.apk", file, true, new ChangeViewWithProgressListener(tvExample));
        mPresenter.downloadFile(downloadFile);
    }

NetworkHelper.getDefault().download(mView, downloadFile, new FileCallBack() {
            @Override
            public void downloadSuccess(File file) {
                mView.downloadFileSuccess(file);
            }

            @Override
            public void downloadFail(Throwable e) {
                mView.downloadFileFail(e);
            }
        });
  • 加載網絡圖片可帶進度
String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999" +
                "_10000&sec=1516793144571&di=01beb0d58d63c328051647c96c7d3742" +
                "&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2F5" +
                "8619c927133fd015f1656ea505cef48c20089ba.jpg";
ImageHelper.getDefault().loadImage(this, new DownloadImage.Builder()
                .path(url)
                .targetView(ivExample)
                .memoryCache(false)
                .diskCache(false)
                .build());
  • 加載本地圖片
NeedPermissionOperate.getDefault().buildSafeExternalStoragePath(this, "scene_photo.jpg", 
new MustGrantPermissionCallBack(this) {
            @Override
            public void granted(Context context, String result) {
                ImageHelper.getDefault().loadImage(context, 
                new DownloadImage.Builder().path(result).targetView(ivExample).build());
            }
        });
  • 請求權限
PermissionHelper.getDefault().requestPermissions(this, new MustGrantPermissionCallBack(this) {
            @Override
            public void granted(Context context, String result) {

            }
        }, Permission.cameraPermission());
  • 圖片預覽
String[] images = new String[3];
images[0] = "http://p9.pstatp.com/large/615c0002e579e79689d0";
images[1] = "http://p3.pstatp.com/large/615e00012d933c0d545f";
images[2] = "http://p1.pstatp.com/large/615c0002e578aee415e6";
ImagesPreviewActivity.startImagesPreview(this, images, 0);
  • 三方分享
    你需要在share&login組件庫的ShareLoginApplication和Manifest中設置三方平臺的appkey,不然不能正常使用該組件
    可在ThirdPartyPanelHelper中重新定義需要的分享版樣式
SharePanelActivity.startShare(this, new ShareInfo("hello"), new IThirtyPartyShareListener() {
            @Override
            public void onShareStart(String platform) {
                showLoading();
                LogUtils.e("onShareStart: " + platform);
            }

            @Override
            public void onShareEnd(String platform) {
                dismissLoading();
                LogUtils.e("onShareEnd: " + platform);
            }

            @Override
            public void onShareError(String platform, Throwable throwable) {
                dismissLoading();
                ToastUtils.showToast(throwable.getMessage());

            }

            @Override
            public void onShareCancel(String platform) {
                dismissLoading();
                LogUtils.e("onShareCancel: " + platform);
            }
        });
  • 三方登錄
ThirdPartyLoginHelper.getDefault().login2QQ(this, new IThirtyPartyLoginListener() {
            @Override
            public void loginStart(String platform) {

            }

            @Override
            public void loginSuccess(String platform, ThirdPartyUserInfo userInfo) {

            }

            @Override
            public void loginError(String platform, Throwable throwable) {

            }

            @Override
            public void loginCancel(String platform) {

            }
        });
  • 網頁加載(是個單獨的組件,使用騰訊的TBS解決方案共享X5內核)
WebActivity.startLoadHTML(this, "https://www.baidu.com/");

tips:這裏的網絡加載框是我默認設置的菊花轉圈圈,你覺得適合就用,不適合你的項目話就自己在BaseActivity裏重新實現這三個方法,並在用戶自主取消請求時調用ObservableManager.getInstance().stopObserver();

void showLoading(boolean cancelable);
void showLoading();
void dismissLoading();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章