閒來無事抽取了一個無關業務的公共庫以備以後快速開發,此庫還不太完善,還需不斷改善
使用 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();