提供各种基类、工具类、Android6.0动态权限管理、网络请求、文件上传下载、图片选择、应用检查更新等功能,极大的提升了开发的效率
1.3.4版本已经完成第三方登录和分享,请各位小伙伴尽快升级到1.3.4版本
1.3.4版本添加RecyclerView的BaseAdapter、自定义轮播广告控件、第三方登录(QQ和微信)、第三方分享(QQ和微信),详情请参考下面的介绍
1.4.1版本升级完成。
主要对sdk代码的设计模式进行优化
升级描述请见https://github.com/qxq5434/QxqSDK/blob/master/1.4.1升级讲解
1.4.3版本升级
修改了一些bug
修改轮播广告第一次加载时会显示默认图标
compile 'com.github.qxq.library:qxqsdk:1.4.2'
如果小伙伴有什么好的建议请发邮件至[email protected],谢谢
在工程的build.gradle中添加如下代码,一步轻松搞定
compile 'com.github.qxq.library:qxqsdk:1.4.2'
-
QxqBaseActivity
Activity的基类 -
QxqBaseFragment
Fragment的基类 -
QxqBaseSwipeBackActivity
带有滑动返回功能的Activity的基类 -
QxqBaseMVPActivity
MVP架构的Activity基类 -
QxqBaseMVPSwipeBackActivity
带有滑动返回的MVP架构的Activity基类
继承以上基类需实现以下四个抽象方法
/**
* 初始化布局
*/
protected abstract void initLayout();
/**
* 初始化数据
*/
protected abstract void initData();
/**
* 设置控件事件
*/
protected abstract void initListener();
/**
* 设置界面视图
*/
protected abstract void setContentView();
基类自带一个加载方法
//加载
showLoadingDialog(this,"正在加载...");
//注:this必须为Activity
//关闭
if(dlg != null)
dlg.dismiss();
基类自带Activity跳转方法
startAnimActivity(TestActivity.class,new String[]{"参数名1","参数名2"},new String[]{"参数值1","参数值2"});
基类自带Activity返回方法
backAnimActivity();
基类自带权限管理方法(Activity)
//你程序用到的权限集
String[] mPermissionList = new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE};
checkPermission(mPermissionList);
- ToastUtil
msg:String类型的Toast文本
strRes:在string.xml中定义的文本的id
showShortToast(String msg);
showShortToast(int strRes);
showLongToast(String msg);
showLongToast(int strRes);
showToast(String msg,int duration);
调用方法
ToastUtil.getInstance().showToast();
- LogUtil
调用方法
1、在程序的Application中初始化LogUtil
LogUtil.init(true);
//参数:当参数为true时打印log,否则不打印log 当应用在调试阶段设置为true,当应用正式上线后设置为false
2、LogUtil.getInstance().i(String tag, String desc);
- DialogUtil
调用方法
DialogUtil.getInstance()//注:这里的this必须为activity不能是Context
.setTitle("")//diaolog标题
.setMessage("")//diaolog描述
.setBtn1Text("")//第一个按钮的文本
.setBtn2Text("")//第二个按钮的文本
.setSetCancelable(false)//设置按返回键时dialog是否消失
.setSetCanceledOnTouchOutside(false)//设置点击dialog以外区域时dialog是否消失
.setBtn1Listener(new DialogInterface.OnClickListener{})//设置第一个按钮的点击回调
.setBtn2Listener(new DialogInterface.OnClickListener{})//设置第二个按钮的点击回调
.showDialog(this);
- QxqUtils
详情请见https://github.com/qxq5434/QxqSDK/blob/master/QxqUtils
- 多图选择
PhotoPickUtil.newInstance().startPhotoPickToList(getActivity(),mPickData);
mPickData:存放选择图片的数组
- 单图选择
PhotoPickUtil.newInstance().startPhotoPickToOne(getActivity());
- 回调函数
//在程序的onActivityResult中调用如下回调函数
PhotoPickUtil.newInstance().onActivityResult(requestCode,requestCode,data, new PhotoPickResult() {
@Override
public void OneImage(String path) {
//path:选择的单张图片的地址
}
@Override
public void ListImage(ArrayList<ImageInfo> arrayList) {
//arrayList:选择的图片数组
}
});
- 注册相关Activity
<activity
android:name="com.qxq.photopick.PhotoPickActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name="com.qxq.photopick.PhotoPickDetailActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
/>
<activity
android:name="com.qxq.photopick.CropImageUIActy"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
/>
运用RxJava+Retrofit2+OkHttp完成以下功能
功能
get、post网络请求
文件上传
文件下载
在你的Application中初始化QxqHttpUtil
QxqHttpUtil.getInstance().setBaseParam("your baseurl");
QxqHttpUtil.getInstance().setBaseParam("your baseurl",int timeout);//timeout:访问超时时间设置
- GET请求
参数
url:你需要请求的url地址
OnHttpCallBackListener:请求完成后的回调函数
QxqHttpUtil.getInstance().get("your url",
new OnHttpCallBackListener() {
@Override
public void onComplete(String json) {
QxqLogUtil.onBind().i("TAG","json..."+json);
}
@Override
public void onError(String error) {
QxqLogUtil.onBind().i("TAG","error..."+error);
}
});
- POST请求
参数
url:你需要请求的url地址
map:你需要请求的参数集
OnHttpCallBackListener:请求完成后的回调函数
QxqHttpUtil.getInstance().post("your url", map, new OnHttpCallBackListener() {
@Override
public void onComplete(String json) {
QxqLogUtil.onBind().i("TAG","json..."+json);
}
@Override
public void onError(String error) {
QxqLogUtil.onBind().i("TAG","error..."+error);
}
});
- POST请求上传json
参数
url:你需要请求的url地址
json:你需要传递的json
OnHttpCallBackListener:请求完成后的回调函数
QxqHttpUtil.getInstance().postToJson("your url", "your json", new OnHttpCallBackListener() {
@Override
public void onComplete(String json) {
QxqLogUtil.onBind().i("TAG","json..."+json);
}
@Override
public void onError(String error) {
QxqLogUtil.onBind().i("TAG","error..."+error);
}
});
QxqHttpUtil.getInstance().downloadBuilder()
.setDownLoadUrl("your file download url")
.setDownLoadFilePath("/testDownLoad")//文件下载后存放的文件夹
.setDownLoadFileName("test.apk")//文件下载后的名字
.setDownLoadListener(new OnDownLoadListener() {
@Override
public void onSuccess() {
QxqToastUtil.onBind().showLongToast("下载完成!");
dialog.dismiss();
}
@Override
public void onFailure(String error) {
QxqToastUtil.onBind().showLongToast("下载失败!"+error);
}
@Override
public void onLoading(long l, long l1) {
//文件下载进度
int progress = ((int) ((l1 / (float) l) * 100));
}
})
.startDownload();
如果上传的是图片(设置setUpLoadIsImage(true)),sdk会自动根据图片大小进行压缩,做到完全一步到位
- 单个文件上传
QxqHttpUtil.getInstance().uploadBuilder()
.setUpLoadFilePath("file path")//需要上传的文件路径
.setUpLoadFileName("")//服务器的文件参数名
.setUpLoadUrl("")//上传的地址
.setUpLoadIsImage(true)//设置上传的文件是否是图片,默认为true
.setUpLoadListener(new OnUpLoadListener() {
@Override
public void onSuccess() {
QxqToastUtil.onBind().showLongToast("上传成功!");
}
@Override
public void onFailure(String error) {
QxqToastUtil.onBind().showLongToast("上传失败!"+error);
}
@Override
public void onLoading(long total, long progress) {
//进度
int progress2 = ((int) ((total / (float) progress) * 100));
}
})
.startUploadFile();
- 多文件上传
Map<String,File> map = new HashMap<String, File>();
map.put("image0",new File(""));
map.put("image1",new File(""));
map.put("image2",new File(""));
QxqHttpUtil.getInstance().uploadBuilder()
.setUpLoadFiles(map)//需要上传的文件集
.setUpLoadUrl("url")//上传的地址
.setUpLoadIsImage(true)//设置上传的文件是否是图片,默认为true
.setUpLoadListener(new OnUpLoadListener() {
@Override
public void onSuccess() {
QxqToastUtil.onBind().showLongToast("上传成功!");
}
@Override
public void onFailure(String error) {
QxqToastUtil.onBind().showLongToast("上传失败!"+error);
}
@Override
public void onLoading(long total, long progress) {
//进度
int progress2 = ((int) ((total / (float) progress) * 100));
}
})
.startUploadFiles();
- 文件上传 (from表单格式,适用于注册或者修改个人信息用户头像和用户信息一起上传)
String url = "your upload url";
Map<String ,String> map = new HashMap<String, String>();
map.put("id","123");
map.put("nickname","test");
QxqHttpUtil.getInstance().uploadBuilder()
.setUpLoadFileName("icon")//服务器图片参数名
.setUpLoadFilePath("file path")//你需要上传的文件路径
.setUpLoadMap(map)//你的用户信息
.setUpLoadUrl(url)//你的上传地址
.setUpLoadIsImage(true)//设置上传的文件是否是图片,默认为true
.setUpLoadListener(new OnUpLoadListener() {
@Override
public void onSuccess() {
QxqToastUtil.onBind().showLongToast("上传成功!");
}
@Override
public void onFailure(String error) {
QxqToastUtil.onBind().showLongToast("上传失败!"+error);
}
@Override
public void onLoading(long total, long progress) {
//上传的进度
int progress2 = ((int) ((total / (float) progress) * 100));
}
})
.startUploadInfo();
注:服务器返回的json数据应为如下格式
{
"data": {
"version": "1.0",
"url": "your apk downlod url",
"message": "your update message"
}
}
UpdateManager.init().setContext(getActivity())
.setUpdateUrl("your url")//你的更新地址
.setUpdateFilePath("")//设置下载后apk的存放路径
.setUpdateFileName("")//设置下载后apk的名字
.getVersion();
以下是qxq1.3.1版本更新的类容
com.github.qxq.library:qxqsdk:1.3.1
新建一个TestAdapter类继承QxqBaseRecyclerViewAdapter
新建一个TestHolder类继承QxqBaseViewHolder
在TestHolder里面实现你的业务逻辑
详情请见QxqSDKExample
adapter = new TestAdapter(getActivity());
adapter.setIsLoadMore(true);//设置是否需要加载更多
adapter.setPageCount(10);//设置你每页需要显示多少行
adapter.setOnRecyclerViewListener(onItemClickListener);
//如果你需要用RecyclerView实现ListView的效果
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
//如果你需要用RecyclerView实现GridView的效果
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
adapter.setLoadMore(mRecyclerView, layoutManager, new QxqBaseRecyclerViewAdapter.RecyclerViewLoadMoreCallBack() {
@Override
public void loadMore() {
page ++;
//请求数据
}
});
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL,R.color.index_item_grey));
mRecyclerView.setAdapter(adapter);
adapter.update(list,page);
该控件分为Activit和Fragment两种
//fragment
<fragment
android:layout_width="match_parent"
android:layout_height="250dp"
android:id="@+id/fragment_cycle_viewpager_content"
android:name="com.qxq.view_pager.QxqFragmentCycleViewPager"
/>
//activity
<fragment
android:layout_width="match_parent"
android:layout_height="250dp"
android:id="@+id/fragment_cycle_viewpager_content"
android:name="com.qxq.view_pager.QxqActivityCycleViewPager"
/>
QxqActivityCycleViewPager cycleViewPager = (QxqActivityCycleViewPager)getFragmentManager().findFragmentById(R.id.fragment_cycle_viewpager_content);
//QxqFragmentCycleViewPager cycleViewPager = (QxqFragmentCycleViewPager)getChildFragmentManager().findFragmentById(R.id.fragment_cycle_viewpager_content);
QxqViewPagerUtil.onBind()
.with(cycleViewPager)//添加控件
.setIsActivity(true)//设置当前是不是在Activity
.setWheel(true)//设置是否轮播
.setTime(3000)//设置轮播切换时间(毫秒)
.setPointImageRes(R.mipmap.icon_point,R.mipmap.icon_point_pre)//设置切换的点的资源图片
.setData(datas)//设置数据
.setImageCycleViewListener(new ImageCycleViewListener() {
@Override
public void onImageClick(int postion, View imageView) {
QxqToastUtil.onBind().showLongToast("第"+(postion + 1)+"个");
}
})
.show(getApplicationContext());
//在程序的Application中添加如下代码
QxqLoginUtil.init(this);
QxqLoginUtil.setQQ("1104911867","vZTng1q5fKbLQI08");
QxqLoginUtil.setWeiXin("wx023daf39180f3578","d4624c36b6795d1d99dcf0547af5443d");
- QQ登录
QxqLoginUtil.onBind(getActivity()).loginToQQ( new QxqLoginCallBack() {
@Override
public void onError(String error) {
}
@Override
public void onCancel(String str) {
}
@Override
public void onStart(String str) {
}
@Override
public void onComplete(String json) {
QxqLogUtil.onBind().i("json",json);
}
});
//需要实现onActivityResult
QxqLoginUtil.onBind(this).onActivityResult(requestCode,resultCode,data);
//注:如果是在Fragment中调用的登录功能,请在fragment的容器Activity中实现onActivityResult
- 微信登录
QxqLoginUtil.onBind(getActivity()).loginToWeiXin(new QxqLoginCallBack() {
@Override
public void onError(String error) {
QxqLogUtil.onBind().i("ERROR",error+"===");
}
@Override
public void onCancel(String str) {
}
@Override
public void onStart(String str) {
}
@Override
public void onComplete(String json) {
QxqLogUtil.onBind().i("json",json+"---");
}
});
//请在自己程序中包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.qxqsdk(com.qxqsdk.wxapi)
在onDestroy方法中调用QxqLoginShareUtil.onBind(getActivity()).release();释放资源
注:第三方分享和第三方登录的配置方法一样,如已经配置了第三方登录分享就不用重新配置
//分享纯文字
QxqLoginShareUtil.onBind(getActivity()).shareToText(SHARE_TYPE.WEIXIN_CIRCLE, "content",callBack);
//分享纯图片
//图片格式支持网页地址、资源文件、bitmap
QxqLoginShareUtil.onBind(getActivity()).shareToImage(SHARE_TYPE.WEIXIN_CIRCLE, "content",R.drawable.ic_launcher,callBack);
//分享网页
QxqLoginShareUtil.onBind(getActivity()).shareToUrl(SHARE_TYPE.WEIXIN_CIRCLE,"http://www.baidu.com/","title" ,"content",R.drawable.ic_launcher,callBack);
QxqLoginShareCallBack callBack = new QxqLoginShareCallBack() {
@Override
public void onError(String error) {
QxqToastUtil.onBind().showLongToast(error);
}
@Override
public void onCancel(String str) {
QxqToastUtil.onBind().showLongToast(str);
}
@Override
public void onStart(String str) {
QxqToastUtil.onBind().showLongToast(str);
}
@Override
public void onComplete(String json) {
QxqToastUtil.onBind().showLongToast(json);
}
};
//显示进度条dialog
ProgressDialog dialog = QxqDialogUtil.getInstance().progressDialog().setMessage("正在获取用户信息...").showProgressDialog(this);
dialog.dismiss();