经常使用的版本:com.jiechic.library:xUtils:2.6.14;
xUtils 是一个工具类的集合体,其中包含许多实用的Android工具,主要包含四大模块:
1、 ViewUtils的模块
2、 HttpUtils的模块
3、 BitmapUtils的模块
4、 DBUtils的模块
----ViewUtils的使用--->
Android中的ioc框架,完全注解方式就可以进行UI、资源和事件注入绑定
控制反转(Inversion of Control,英文缩写为 IoC):创建被调用者的工作不再由调用者来完成,因此称为控制反转。
使用注解和反射来实现控制反转(注入)
调用ViewUtils.inject(this),此方法中会利用反射遍历类中所有注解,对注解的功能一一实现
@ContentView(value = R.layout.activity_main)
@ViewInject(R.id.btTest)
private Button mBtnTest;
@ResInject(type = ResType.String,id = R.string.app_name)
String strAppName;
@OnClick(R.id.btTest)
public void onClick(View view){
Toast.makeText(this,"onClick",Toast.LENGTH_SHORT).show();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
// 加载布局
View view = inflater.inflate(R.layout.db_fragment, container, false);
// 依赖注入,第一个是用来反射获取注解,第二个参数用来findviewbyid
ViewUtils.inject(this, view);
return view;
}
@ViewInject(R.id.db_test_btn)
private Button stopBtn;
@ViewInject(R.id.result_txt)
private TextView resultText;
@OnClick(R.id.db_test_btn)
public void testDb(View view) {
}
protected class ViewHolder {
@ViewInject(R.id.tvItem)
public TextView tvItem;
}
注入的时候需要传2个参数,第一个是注解所在的类,为了获取注解,第二个是父view,为了调用findviewbyid得到注解所标记的view
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.layout_listitem, null);
ViewHolder viewHolder = new ViewHolder();
//viewHolder.tvItem = (TextView) convertView.findViewById(R.id.tvItem);
ViewUtils.inject(viewHolder,convertView);
convertView.setTag(viewHolder);
}
initializeViews((T)getItem(position), (ViewHolder) convertView.getTag());
return convertView;
}
@OnItemClick(R.id.lvTest)
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(this,"onItemClick",Toast.LENGTH_SHORT).show();
}
//指定表名,如果不用这个注解,表名默认为包名+类名
@Table(name="tbl_User")
public class User {
//主键,必须有,自增长
@Id
private int id;
//指定列名,如果不指定,就是字段名
//Unique注解代表字段唯一,不重复
@Column(column="username")
@Unique
private String name;
//column可以省略
//非空
@Column
@NotNull
private String email;
//规定年龄值的范围
@Check("20 <= age and age <= 130")
private int age;
//getxxx
//setxxx
//tostring
//......
/**
* 创建数据库,默认路径:/data/data/包名/database/xutils.db
*/
protected void createDb(){
mdbUtils = DbUtils.create(this);
}
/**
* 创建数据库,指定路径和数据库名
*/
protected void createDbWithDirName(){
String strPath = "/sdcard/";
Log.d("createDbWithDirName", "path=" + strPath);
mdbUtils = DbUtils.create(this, strPath, "mydb2");
}
/**
* 使用配置方式创建数据库
*/
protected void createDbWithConfig(){
DbUtils.DaoConfig daoConfig = new DbUtils.DaoConfig(this);
daoConfig.setDbDir("/sdcard/");
daoConfig.setDbName("mydb");
mdbUtils = DbUtils.create(daoConfig);
}
protected void createTableAndInsert(){
User user = new User();
user.setName("zhangsan");
user.setEmail("zhangsna@1000phone.com");
user.setAge(20);
User user2 = new User();
user2.setName("lisi");
user2.setEmail("lisi@1000phone.com");
user2.setAge(22);
List<User> listusers = new ArrayList<User>();
listusers.add(user);
listusers.add(user2);
try {
mdbUtils.saveAll(listusers);
} catch (DbException e) {
Log.d("LessonDbUtils",e.getMessage());
}
}
protected void queryData(){
try {
List<User> listUsers = mdbUtils.findAll(User.class);
Log.d("queryData", listUsers.toString());
} catch (DbException e) {
e.printStackTrace();
}
}
protected void updateData(){
try {
User user = mdbUtils.findById(User.class, 2);
user.setAge(32);
mdbUtils.update(user, "age");
} catch (DbException e) {
e.printStackTrace();
}
}
protected void deleteData(){
User user = new User();
user.setId(2);
try {
mdbUtils.delete(user);
} catch (DbException e) {
e.printStackTrace();
}
}
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
/**
* 使用默认配置创建
*/
protected void createBitmapUtils()
{
mBmUtils = new BitmapUtils(this);
}
/**
* 自定义各种配置
*/
protected void createBitmapUtilsWithCfg(){
//指定本地缓存路径以及内存缓存大小
int iSize = (int) (Runtime.getRuntime().maxMemory()/8);
mBmUtils = new BitmapUtils(this,"/sdcard/bmcc",iSize);
//线程池中线程数量
mBmUtils.configThreadPoolSize(4);
//加载失败图片
mBmUtils.configDefaultLoadFailedImage(R.mipmap.ic_launcher);
//加载中图片
mBmUtils.configDefaultLoadingImage(R.mipmap.ic_launcher);
//连接超时时间
mBmUtils.configDefaultConnectTimeout(30000);
//设置图片大小
mBmUtils.configDefaultBitmapMaxSize(300,300);
}
protected void InitImageView() {
//加载网络图片,默认本地缓存路径:/storage/emulated/0/Android/data/包名/cache/xBitmapCache
mBmUtils.display(mIvTest,
"http://pic12.nipic.com/20110217/6757620_105953632124_2.jpg");
//加载本地图片
//bmUtils.display(mIvTest,"/sdcard/aaa.jpg");
//加载assets下面的图片
//bmUtils.display(mIvTest,"assets/abc.jpg");
}
protected void InitListView(){
List<String> listUrls = new ArrayList<String>();
//为了看到演示效果,清除并关闭缓存
mBmUtils.clearCache();
mBmUtils.configDiskCacheEnabled(false);
mBmUtils.configMemoryCacheEnabled(false);
for (int i = 0; i < 20; i++) {
listUrls.add("http://pic12.nipic.com/20110217/6757620_105953632124_2.jpg");
}
MyAdapter<String> adapter = new MyAdapter<String>(this,listUrls,mBmUtils);
mLvTest.setAdapter(adapter);
//滑动(手指没有离开屏幕)和快速滑动(手指离开屏幕)都不加载图片,滑动时可以看到效果
mLvTest.setOnScrollListener(new PauseOnScrollListener(mBmUtils, true, true));
}
packagingOptions {
exclude ‘META-INF/DEPENDENCIES‘
exclude ‘META-INF/NOTICE‘
exclude ‘META-INF/LICENSE‘
exclude ‘META-INF/LICENSE.txt‘
exclude ‘META-INF/NOTICE.txt‘
}
mHttpUtils = new HttpUtils();//最好整个应用一个实例
/**
* 给httputils配置各种参数
*/
void configUtils(){
//设置线程池数量
mHttpUtils.configRequestThreadPoolSize(4);
//设置请求重试次数
mHttpUtils.configRequestRetryCount(3);
//设置响应编码
mHttpUtils.configResponseTextCharset("utf-8");
//设置请求超时时间
mHttpUtils.configTimeout(30000);
}
/**
* 使用get方法获取数据
*/
void httpGet(){
mHttpUtils.send(HttpRequest.HttpMethod.GET, "http://op.juhe.cn/yi18/news/newsclass?key=c90b25c724fea7c5d6207e352fb03c63", new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.d("qfhttpget", responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
Log.d("qfhttpget", msg);
}
});
}
/**
*通过设置param来获取get数据
*/
void httpGetBySetParam(){
RequestParams requestParams = new RequestParams();
NameValuePair nameValuePair = new BasicNameValuePair("key","c90b25c724fea7c5d6207e352fb03c63");
requestParams.addQueryStringParameter(nameValuePair);
mHttpUtils.send(HttpRequest.HttpMethod.GET, "http://op.juhe.cn/yi18/news/newsclass", requestParams, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.d("qfhttpGetBySetParam",responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
Log.d("qfhttpGetBySetParam",msg);
}
});
}
/**
* post请求
*/
void httpPost(){
String strUrl = "http://op.juhe.cn/yi18/news/newsclass";
RequestParams requestParams = new RequestParams();
requestParams.addBodyParameter("key", "c90b25c724fea7c5d6207e352fb03c63");
//也可以用NameValuePair
// NameValuePair paramsPair = new BasicNameValuePair("key","c90b25c724fea7c5d6207e352fb03c63");
// requestParams.addBodyParameter(paramsPair);
mHttpUtils.send(HttpRequest.HttpMethod.POST, strUrl, requestParams, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.d("qfhttpPost",responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
}
});
}
/**
* 文件下载
*/
void httpDowload(){
String strUrl = "http://apache.fayea.com//httpcomponents/httpclient/binary/httpcomponents-client-4.5.1-bin.zip";
mHttpUtils.download(strUrl, "/sdcard/httpclient.zip", new RequestCallBack<File>() {
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
}
@Override
public void onFailure(HttpException error, String msg) {
Log.d("qfhttpDowload", msg);
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
Log.d("qfhttpDowload", ((current * 100) / total) + "%\n");
}
});
}
启动:sudo apachectl start
停止:sudo apachectl stop
重启:sudo apachectl restart
/**
* 文件上传
*/
void httpUpload(){
String strHost = "http://10.2.169.118/upload.php";
RequestParams requestParams = new RequestParams();
requestParams.addBodyParameter("files[0]",new File("/sdcard/aaa.jpg"));
requestParams.addBodyParameter("files[1]",new File("/sdcard/mydb"));
mHttpUtils.send(HttpRequest.HttpMethod.POST, strHost, requestParams, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.d("qfhttphttpUpload", "ok");
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
Log.d("qfhttphttpUpload", ((current * 100) / total) + "%\n");
}
@Override
public void onFailure(HttpException error, String msg) {
Log.d("qfhttphttpUpload", msg);
}
});
}
原文:http://www.cnblogs.com/aWay01/p/5277869.html