xUtils框架
xUtils框架介绍
- xUtils包含了很多实用的android工具。
- xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更多灵活的ORM,更多的事件注解支持且不受混淆影响…
- xUitls最低兼容android 2.2(api等级8)
目前xUtils主要的四大模块:
DbUtils模块;ViewUtils模块;HttpUtils模块;BitmapUtils模块
下载地址:https://github.com/qxbl/xUtils
下载完之后,解压,导入jar包
DbUtils模块
- 安卓中的ORM框架,一行代码就可以进行增删改查;
- 支持事务,默认关闭;
- 可通过注释自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
- 支持绑定外键,保存实体时外键关联实体自动保存或更新;
- 自动加载外键关联实体,支持延时加载;
- 支持链式表达查询,更直观的查询语义,参考下面的介绍或样品中的例子。
权限设置
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
创建对象
package com.example.xutils;
public class User {
private int id;
private String name;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User(String email, String name) {
this.email = email;
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"email='" + email + '\'' +
", id=" + id +
", name='" + name + '\'' +
'}';
}
}
MainActivity.java
package com.example.xutils;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.lidroid.xutils.DbUtils;
import com.lidroid.xutils.db.sqlite.Selector;
import com.lidroid.xutils.db.sqlite.WhereBuilder;
import com.lidroid.xutils.exception.DbException;
import java.util.List;
public class MainActivity extends AppCompatActivity {
DbUtils dbUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbUtils= DbUtils.create(this,"mydb");
}
//添加
public void saveClick(View v){
User user=new User("csy@qq.com","csy");
try {
dbUtils.save(user);
Toast.makeText(this, "save success", Toast.LENGTH_SHORT).show();
Log.i("tag","save success");
} catch (DbException e) {
e.printStackTrace();
}
}
//全查
public void findAllClick(View v){
try {
List<User> list=dbUtils.findAll(User.class);
for (User u:list)
{
Log.i("tag", String.valueOf(u));
}
} catch (DbException e) {
e.printStackTrace();
}
}
//条件查找
public void selectByClick(View view)
{
try {
User user = dbUtils.findFirst(Selector.from(User.class).where("name","=","csy"));
Toast.makeText(this,user.toString(),Toast.LENGTH_LONG).show();
Log.i("tag", String.valueOf(user));
} catch (DbException e) {
e.printStackTrace();
}
}
//更新操作
public void updateClick(View view)
{
User user=new User();
user.setId(1);
user.setEmail("chensy@qq.com");
user.setName("chensy");
try {
dbUtils.update(user,"email","name");
Toast.makeText(this,"更新成功",Toast.LENGTH_LONG).show();
Log.i("tag","更新成功");
} catch (DbException e) {
e.printStackTrace();
}
}
///删除
public void deleteClick(View view)
{
try {
dbUtils.delete(User.class, WhereBuilder.b("id","=","1"));
Toast.makeText(this,"删除成功",Toast.LENGTH_LONG).show();
Log.i("tag","删除成功");
} catch (DbException e) {
e.printStackTrace();
}
}
}
添加数据效果
查询所有
单个查询
更新
删除
ViewUtils模块
- 安卓中的IOC框架,完全注解方式就可以进行UI,资源和事件绑定;
- 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
- 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
DbUtils dbUtils;
@ViewInject(R.id.textView_data)//相当于findById
private TextView textView_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbUtils= DbUtils.create(this,"mydb");
//注入view和事件
ViewUtils.inject(this);
}
@OnClick(R.id.button_show)
public void show(View view){
textView_data.setText("viewUtils的使用");
}
HttpUtils模块
- 支持同步,异步方式的请求;
- 支持大文件上传,上传大文件不会OOM;
- 支持GET,POST,PUT,移动,复制,删除,HEAD,OPTIONS,TRACE,CONNECT请求;
- 下载支持301/302重定向,支持设置是否根据内容处置重命名下载的文件;
- 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
普通get方法
package com.example.xutils;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
public class Main2Activity extends AppCompatActivity {
@ViewInject(R.id.info)
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ViewUtils.inject(this);
}
@OnClick(R.id.button_login)
public void login(View view){
httpUtils.send(HttpRequest.HttpMethod.GET, "http://www.lidroid.com", new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
textView.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException e, String s) {
}
});
}
}
登录实例
package com.example.xutils;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
public class Main2Activity extends AppCompatActivity {
@ViewInject(R.id.editText_username)
EditText editText_username;
@ViewInject(R.id.editText_password)
EditText editText_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ViewUtils.inject(this);
}
@OnClick(R.id.button_login)
public void login(View view){
String username=editText_username.getText().toString();
String password=editText_password.getText().toString();
HttpUtils httpUtils=new HttpUtils();
String url="";
RequestParams params=new RequestParams();
params.addQueryStringParameter("username",username); //服务器那边对应的参数名称
params.addBodyParameter("password",password); //服务器那边对应的参数名称
httpUtils.send(HttpRequest.HttpMethod.POST, url, params, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
String result=responseInfo.result;
if ("1".equals(result)){
Toast.makeText(Main2Activity.this, "登录成功", Toast.LENGTH_SHORT).show();
Log.i("tag",result);
}else {
Toast.makeText(Main2Activity.this, "登录失败", Toast.LENGTH_SHORT).show();
Log.i("tag",result);
}
}
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(Main2Activity.this, s, Toast.LENGTH_SHORT).show();
Log.i("tag",s);
}
});
}
}
因为需要有一个服务器,所以登录实例没有具体效果图
注意:
使用HttpUtils时出现了“无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase的类文件”这个错误,原因是
android 6.0(api 23) SDK,Android的网络请求强制使用HttpUrlConnection,并且SDK中也已经移除了HttpClient。
解决办法:
在build.gradle中添加
android {
useLibrary'org.apache.http.legacy'
}
BitmapUtils模块
- 加载位图的时候无需考虑位图加载过程中出现的OOM和Android的容器快速滑动时候出现的图片错位等现象;
- 支持加载网络图片和本地图片;
- 内存管理使用LRU算法,更好的管理位图内存;
- 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…