随着XUtils3(以下简称”X3”)的发布,修复了众多Bug、代码重构以及Android5.0版本以上的兼容等,
X3虽然不是说最好最火,但也得到了相当一部分人的喜爱。看到了GitHub上的X3功能介绍和sample
里面的代码,对于经常使用框架的人来说是比较容易理解和快速投入使用的,但对于一些新手来说就
很头疼了,这里就简单的介绍下X3的基本用法,在文章最后有XUtils3的jar包。注:部分代码引入的
github上的X3中sample内代码
转载请注明出处:http://blog.csdn.net/wx_anonymity/article/details/50930109
//注意:在使用XUtils3框架时,记得自定义一个myApplication类继承Application,覆写onCreate方法
// 在application的onCreate中初始化,否则运行时会提示没有合适的权限
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(true); // 是否输出debug日志
}
//进入正题
//异步加载网络图片,在自定义Adapter内写入如下代码
import org.xutils.x;
public class XUtils3ImageAdapter extends BaseAdapter {
private List<String> lists;
private LayoutInflater inflater;
private Context context;
private ImageOptions imageOptions;
public XUtils3ImageAdapter(List<String> lists, Context context) {
this.lists = lists;
this.context = context;
inflater = LayoutInflater.from(this.context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return lists.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return lists.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder vh = null;
if (convertView == null) {
vh = new ViewHolder();
convertView = inflater.inflate(R.layout.item_lv, null);
vh.imageView = (ImageView) convertView.findViewById(R.id.test_iv);
imageOptions = new ImageOptions.Builder()
// 设置图片尺寸
.setSize(DensityUtil.dip2px(300), DensityUtil.dip2px(300))
// 设置圆角(图片以矩形展示,设置四角的弧度)
.setRadius(DensityUtil.dip2px(15))
// 如果ImageView的大小不是定义为wrap_content, 不要crop.
.setCrop(true)
// 很多时候设置了合适的scaleType也不需要它.
// 加载中或错误图片的ScaleType
// .setPlaceholderScaleType(ImageView.ScaleType.MATRIX)
.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
.setLoadingDrawableId(R.drawable.ic_launcher)
.setFailureDrawableId(R.drawable.ic_launcher).build();
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
x.image().bind(vh.imageView, lists.get(position), imageOptions);
return convertView;
}
//自定义Adapter的内部类,ViewHolder,这个没什么好说的了,地球人都知道
class ViewHolder {
ImageView imageView;
}
//之后在主界面MainActivity onCreate方法内写入
List<String> lists_goodsImage = new ArrayList<String>();
lists_goodsImage.add("http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg");
lists_goodsImage.add("http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg");
lists_goodsImage.add("http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg");
之后写一个给ListView,然后设置上述,也就是你自定义的Adapter就可以了,布局文件就一个LinearLayout里面放一个listview,然后再写一个布局文件作为item
网络请求
//这个真的是再简单不过了,直接上代码吧
//直接调用这个方法就可以了
private void testHttp(String username, String password,String url) {
// TODO Auto-generated method stub
RequestParams params = new RequestParams(url);
params.addBodyParameter("username", username);
params.addBodyParameter("password", password);
x.http().get(params, new CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
String result_data = arg0;
Log.i("get_data", result_data);
}
});
}
数据库CURD
//首先,配置DaoConfig
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
.setDbName("test.db")
// 不设置dbDir时, 默认存储在app的私有目录.
// .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单,
// 先这样写了.
.setDbVersion(2)
.setDbOpenListener(new DbManager.DbOpenListener() {
@Override
public void onDbOpened(DbManager db) {
// 开启WAL, 对写入加速提升巨大
db.getDatabase().enableWriteAheadLogging();
}
}).setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion,
int newVersion) {
// 此为更新数据库版本时可以做的操作,这里暂不介绍
// db.addColumn(...);
// db.dropTable(...);
// ...
// or
// db.dropDb();
}
});
//之后得到DBManger
DbManager db = x.getDb(daoConfig);
List<DBTest> parentList = new ArrayList<DBTest>();
try {
//增
for (int i = 0; i < 5; i++) {
//自定义bean类
DBTest parent = new DBTest();
parent.setAdmin(true);
parent.setDate(new java.sql.Date(1234));
parent.setTime(new Date());
parent.setEmail(i + "_@qq.com");
parentList.add(parent);
db.save(parent);
}
//查
DBTest db_temp = db.selector(DBTest.class)
.where("email", "=", "lololo").limit(4000).findFirst();
//删
db.delete(DBTest.class, WhereBuilder.b("email", "=", "lololo"));
//改
WhereBuilder wb = WhereBuilder.b("email", "=", "169_@qq.com");
KeyValue kv = new KeyValue("email", "lololo");
db.update(DBTest.class,wb,kv);
} catch (DbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//功能代码实现了之后,再创建一个JavaBean类来get、set属性值,这里的注解用的是X3,
//就不一一讲述了,详细的可以自己试一下
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
//这句注解是创建数据库的表的语句
@Table(name = "parent", onCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)")
public class DBTest {
@Column(isId = true, name = "id")
private int id;
@Column(name = "name")
public String name;
@Column(name = "email")
private String email;
@Column(name = "isAdmin")
private boolean isAdmin;
@Column(name = "time")
private Date time;
@Column(name = "date")
private java.sql.Date date;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public java.sql.Date getDate() {
return date;
}
public void setDate(java.sql.Date date) {
this.date = date;
}
}
如有错误请指出,谢谢
最后附上X3的jar包链接:http://download.csdn.net/detail/wx_anonymity/9466284