Xutils-->

经常使用的版本:com.jiechic.library:xUtils:2.6.14;

xUtils 是一个工具类的集合体,其中包含许多实用的Android工具,主要包含四大模块: 

1、 ViewUtils的模块 

2、 HttpUtils的模块  

3、 BitmapUtils的模块 

4、 DBUtils的模块 

 

xUitls最低兼容Android 2.2 (API 8)

 

下载地址: https://github.com/wyouflf/xUtils,目前的版本是2.6.14

 

xutils3目前还不太稳定,不建议使用
------------------------------------------------------
反射:
在运行时状态,
对于任意一个类,知道这个类的属性和方法,
对于任意一个对象,访问它的任意一个属性和方法
动态获取类或者对象的信息以及动态调用对象方法
------------------------------------------------------
----ViewUtils的使用--->
Android中的ioc框架,完全注解方式就可以进行UI资源事件注入绑定
控制反转(Inversion of Control,英文缩写为 IoC):创建被调用者的工作不再由调用者来完成,因此称为控制反转。
使用注解和反射来实现控制反转(注入)
调用ViewUtils.inject(this),此方法中会利用反射遍历类中所有注解,对注解的功能一一实现
  • activity中Contentview的注解
@ContentView(value = R.layout.activity_main)
  • activity中View控件的注解
@ViewInject(R.id.btTest)
private Button mBtnTest;
  • activity中资源文件的注解
@ResInject(type = ResType.String,id = R.string.app_name)
String strAppName;
  • activity中事件的注解
@OnClick(R.id.btTest)
public void onClick(View view){
Toast.makeText(this,"onClick",Toast.LENGTH_SHORT).show();
}
  • fragment中的使用:
@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) {
}
  • BaseAdapter中的使用
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();
}
-------------DBUtils+BitmapUtils+HttpUtils-------------->
一、DBUtils
  • 需要添加访问存储卡的权限
  • 定义数据表对应的类,必须是public的非内部类(单独一个类文件)
//指定表名,如果不用这个注解,表名默认为包名+类名
@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
//......
常见的DB注解:
@Check    check约束
@Column   列名
@Id       主键,一般设置为int,自增长
@NotNull  不为空
@Table    表名
@Unique   唯一约束
 
 
  • 创建数据库
/**
* 创建数据库,默认路径:/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();
}

}
 
 
二、BitmapUtils
  • 能设置图片大小,避免oom
  • 基于lru的二级缓存,访问速度较快
  • 避免图片错位
  • 图片列表快速滑动时,可以取消加载滑出屏幕的图片
 
 
1.需要添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.创建BitmapUtils
/**
* 使用默认配置创建
*/
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);

}
 
3.加载图片
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");

}
4.listview滑动时不加载图片
 
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));
}
 
三、httputils
 
  • 需要访问网络权限和写存储卡权限
  • httputils使用httpclient,最新的api23已经不支持httpclient
  • 可以降低编译版本(比如22)
  • 也可以导入httpclient的jar包,可以从http://hc.apache.org/downloads.cgi下载(httpcore和httpclient),也可以在as中搜索httpclient,选择com.hynnet:httpclient:4.5.1,下载并导入后,会出现冲突,需要在模块的gradle中的android块下配置包编译属性,排除冲突的配置文件:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
  • 创建httputils
mHttpUtils = new HttpUtils();//最好整个应用一个实例
  • 配置
/**
* 给httputils配置各种参数
*/
void configUtils(){
//设置线程池数量
mHttpUtils.configRequestThreadPoolSize(4);

//设置请求重试次数
mHttpUtils.configRequestRetryCount(3);

//设置响应编码
mHttpUtils.configResponseTextCharset("utf-8");

//设置请求超时时间
mHttpUtils.configTimeout(30000);

}
 
  • 调用get方法获取数据
/**
* 使用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);
}
});
}
  • get方法也可以设置param
/**
*通过设置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方法获取数据
/**
* 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");
}
});
}
 
  • 文件上传
1.mac下apache服务器的操作:

启动:sudo apachectl start

停止:sudo apachectl stop

重启:sudo apachectl restart

web根目录:/Library/WebServer/Documents/
 
2.upload.php实现上传,支持多文件上传
 
3.实现上传
 
/**
* 文件上传
*/
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);
}
});
}
 
 
 
 

 

posted @ 2016-03-15 01:00  awayaaaaaaaa  阅读(612)  评论(0编辑  收藏  举报