xutils3 导入moudel导入工程之后 怎么引入

Xutils3总结2之数据库 - 博客频道 - CSDN.NET
分类:android
1,什么叫事务?
把N多次操作作为一个整体,从第一个执行到最后一个不可以中断,多个事务之间相互独立互不干扰,事务中始终保持数据的一致性。
2,Xutils3之数据库中:
~1,在开启数据库时添加一个监听,在监听中添加:db.getDatabase().enableWriteAheadLogging(); & //开启数据库支持多线程操作
~2,利用xutils3建立表的步骤:
!1,类上边添加 : @Table(name = &&,onCreated=&sql&)
!2,属性上边添加:@Column(name = &id&,isId = true,autoGen = true,property == &NOT NULL& )
3,什么叫ORM?
~1,全称:Object Relation Mapping &对象关系映射。
~2,意义:面向对象编程语言中的一种编程技术,用于实现不同类型系统的数据之间的转换。
4,出现&error running app instant run requires&异常时,解决方法:
Tools -& Adnroid -& enable ADB integration
5,Xutils3 存储数据时,不但可以存储单个数据(db.save(d))还可以存储一个集合(db.save(ArrayList al))。
6,查看数据库文件默认路径:/data/data/sc.emperor.ps.databasedemo/databases&
7,Xutils3 增删改查步骤;
~1,集成Xutils3:
!1,添加Intent、Write权限
!2,在Gradle Scripts中添加依赖 compile 'org.xutils:xutils:3.3.38'
!3,新建App继承Application添加 x.Ext.init(this);
~2,相关类代码:
package sc.emperor.ps.databasedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import org.xutils.DbManager;
import org.xutils.db.sqlite.SqlInfo;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.db.table.DbModel;
import org.xutils.ex.DbException;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.x;
import java.util.ArrayList;
import java.util.List;
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
private DbManager.DaoConfig dd = new DbManager.DaoConfig().setDbName(&ps.db&).setDbOpenListener(new DbManager.DbOpenListener() {
public void onDbOpened(DbManager db) {
db.getDatabase().enableWriteAheadLogging();
private DbManager db = x.getDb(dd);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);
* 创建库、创建表、添加数据
* @param v
@Event(R.id.bt_Create)
private void onCreate(View v) throws DbException {
ArrayList&Employee& list = new ArrayList&&();
list.add(new Employee(&L1&, &man&, 21));
list.add(new Employee(&L2&, &woman&, 31));
list.add(new Employee(&L3&, &man&, 41));
list.add(new Employee(&L4&, &woman&, 51));
list.add(new Employee(&L5&, &man&, 61));
list.add(new Employee(&L6&, &woman&, 71));
list.add(new Employee(&L7&, &man&, 81));
db.save(list);
* 删除数据库内容
* @param v
* @throws DbException
@Event(R.id.bt_delDb)
private void onDelDb(View v) throws DbException {
db.dropDb();
* 删除数据库中的表
* @param v
* @throws DbException
@Event(R.id.bt_delSheet)
private void onDelSheet(View v) throws DbException {
db.dropTable(Employee.class);
* 删除数据库中名字为L3的那条数据
* @param v
* @throws DbException
@Event(R.id.bt_delData)
private void onDelData(View v) throws DbException {
WhereBuilder b = WhereBuilder.b();
b.and(&name&, &=&, &L3&);
db.delete(Employee.class, b);
* 修改所有年龄大于40所有女性名字叫“哈哈”
* @param v
@Event(R.id.bt_update)
private void onUpdate(View v) throws DbException {
String sql = &select id,name,age,sex from Employee_info where age & 40 and sex = 'woman' &;
List&DbModel& ls = db.findDbModelAll(new SqlInfo(sql));
for (DbModel d : ls
int id = d.getInt(&id&);
Employee e = db.findById(Employee.class, id);
e.setName(&哈&);
db.saveOrUpdate(e);
******************相关辅助类代码:
package sc.emperor.ps.databasedemo;
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
* Created by purplesea on
@Table(name = &Employee_info&)
public class Employee {
@Column(name = &id&, isId = true)
private int id;
@Column(name = &name&)
private String name;
@Column(name = &sex&)
private String sex;
@Column(name = &age&)
private int age;
public Employee() {
public Employee(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
public String toString() {
return &Employee{& +
&id=& + id +
&, name='& + name + '\'' +
&, sex='& + sex + '\'' +
&, age=& + age +
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 getSex() {
return sex;
public void setSex(String sex) {
this.sex = sex;
public int getAge() {
return age;
public void setAge(int age) {
this.age = age;
排名:千里之外
(32)(1)(3)(1)(1)(3)(1)(1)(1)(0)用手机扫描以上二维码直接访问此文。
Struts配置模块MoudelConfig初始化的实现
&& 上回说到Struts的ActionServlet,其中有一步是 initModuleConfig方法,就是用于初始化MoudleConfig实例,它是整个org.apache.struts.config包的核心,在Struts应用运行时用来存放整个Struts应用的配置信息.如果有多个子应用,每个子应用都会有一个ModuleConfig对象.ModuleConfig和Struts配置文件的根元素&struts-config&对应.&struts-config&根元素中包含&form-bean&,&action&和&forward&等一系列子元素,因此MouduleConfig中包含了和每个子元素对应的配置类实例.
同时Struts中的MessageResource、PlugIn、数据源等,都是通过ModuleConfig来实现的,所以在ActionServlet初始化上面的那些模块之前,就先要初始化ModuleConfig,然后由ModuleConfig来负责其初始化。
struts中读取模块配置MoudleConfig采用了这样的工厂方法
一个接口:ModuleConfig.java
一个抽象类:ModuleConfigFactory.java
一个ModuleConfig的实现类:ModuleConfigImpl.java
一个ModuleConfigFactory的子类:DefaultModuleConfigFactory.java
一.initModuleConfigFactory()
在ActionServlet初始化ModuleConfig的时候,先要初始化配置工厂,
initModuleConfigFactory();
initModuleConfigFactory();
那么这个工厂到底初始化了什么?
现看源代码:
protected void initModuleConfigFactory(){
String configFactory = getServletConfig().getInitParameter(&configFactory&);
if (configFactory != null) {
ModuleConfigFactory.setFactoryClass(configFactory);
protected void initModuleConfigFactory(){
String configFactory = getServletConfig().getInitParameter(&configFactory&);
if (configFactory != null) {
ModuleConfigFactory.setFactoryClass(configFactory);
很明显,现从配置参数取得其配置,如果用户没有作配置,那么就使用默认配置,如果用户作了配置,那么就使用用户的配置。
如果用户作了配置的话,那么就执行设置成用户的工厂。如何设置的呢?
public static void setFactoryClass(String factoryClass) {
ModuleConfigFactory.factoryClass = factoryC
ModuleConfigFactory.clazz = null;
public static void setFactoryClass(String factoryClass) {
ModuleConfigFactory.factoryClass = factoryC
ModuleConfigFactory.clazz =
直接给ModuleConfigFactory.factoryClass赋值,因为此变量是一个静态的变量:
protected static String factoryClass =
&org.apache.struts.config.impl.DefaultModuleConfigFactory&;
protected static String factoryClass =
&org.apache.struts.config.impl.DefaultModuleConfigFactory&;
由此定义决定了可以使用此赋值方法。正是因为此变量是一个静态的变量,所以在下面的得工厂生成对象的时候就可以创建一个用户自己的对象。
二.initModuleConfig()
之后由配置工厂再实例化一个ModuleConfig的对象。
ModuleConfig moduleConfig = initModuleConfig(&&, config);
ModuleConfig moduleConfig = initModuleConfig(&&, config);
看一下initModuleConfig方法是如何初始化ModuleConfig的,看下面的源代码:
protected ModuleConfig initModuleConfig(String prefix, String paths)
throws ServletException {
//这个地方,我们可以看到,此时就由ModuleConfigFactory直接创建了一个工厂对象,而此时我们用的配置就是上面我们初始化后的配置。如果用户自己做了配置,那么此时初始化的工厂就是用户指定后的工厂。如果没有的话,那么就初始化的时默认的工厂。
DefaultModuleConfigFactory的一个实例
ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory();
ModuleConfig config = factoryObject.createModuleConfig(prefix);
// Configure the Digester instance we will use
Digester digester = initConfigDigester();
// Process each specified resource path
while (paths.length() & 0) {
digester.push(config);
String path = null;
int comma = paths.indexOf(',');
if (comma &= 0) {
path = paths.substring(0, comma).trim();
paths = paths.substring(comma + 1);
path = paths.trim();
paths = &&;
if (path.length() & 1) {
this.parseModuleConfigFile(digester, path);
getServletContext().setAttribute(
Globals.MODULE_KEY + config.getPrefix(),
// Force creation and registration of DynaActionFormClass instances
// for all dynamic form beans we wil be using
FormBeanConfig fbs[] = config.findFormBeanConfigs();
for (int i = 0; i & fbs. i++) {
if (fbs[i].getDynamic()) {
fbs[i].getDynaActionFormClass();
protected ModuleConfig initModuleConfig(String prefix, String paths)
throws ServletException {
//这个地方,我们可以看到,此时就由ModuleConfigFactory直接创建了一个工厂对象,而此时我们用的配置就是上面我们初始化后的配置。如果用户自己做了配置,那么此时初始化的工厂就是用户指定后的工厂。如果没有的话,那么就初始化的时默认的工厂。
也就是DefaultModuleConfigFactory的一个实例
ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory();
ModuleConfig config = factoryObject.createModuleConfig(prefix);
// Configure the Digester instance we will use
Digester digester = initConfigDigester();
// Process each specified resource path
while (paths.length() & 0) {
digester.push(config);
String path =
int comma = paths.indexOf(',');
if (comma &= 0) {
path = paths.substring(0, comma).trim();
paths = paths.substring(comma + 1);
path = paths.trim();
paths = &&;
if (path.length() & 1) {
this.parseModuleConfigFile(digester, path);
getServletContext().setAttribute(
Globals.MODULE_KEY + config.getPrefix(),
// Force creation and registration of DynaActionFormClass instances
// for all dynamic form beans we wil be using
FormBeanConfig fbs[] = config.findFormBeanConfigs();
for (int i = 0; i & fbs. i++) {
if (fbs[i].getDynamic()) {
fbs[i].getDynaActionFormClass();
三.createModuleConfig()方法
那么初始化配置模块createModuleConfig方法到底做了什么呢?
其实是生成了一个ModuleConfig的对象。这个对象是由其工厂产生的,由什么样的工厂就会生成什么样的产品。所以如果是用户配置过的工厂,那么就会生成其对应的配置模块的实现。
默认的情况:
public class DefaultModuleConfigFactory extends ModuleConfigFactory implements Serializable{
// --------------------------------------------------------- Public Methods
* Create and return a newly instansiated {@link ModuleConfig}.
* This method must be implemented by concrete subclasses.
* @param prefix Module prefix for Configuration
public ModuleConfig createModuleConfig(String prefix) {
return new ModuleConfigImpl(prefix);
public class DefaultModuleConfigFactory extends ModuleConfigFactory implements Serializable{
// --------------------------------------------------------- Public Methods
* Create and return a newly instansiated {@link ModuleConfig}.
* This method must be implemented by concrete subclasses.
* @param prefix Module prefix for Configuration
public ModuleConfig createModuleConfig(String prefix) {
return new ModuleConfigImpl(prefix);
它的createModuleConfig(String prefix)方法会生成一个ModuleConfigImpl类。
四.ModuleConfigImpl类
&&& ModuleConfigImpl类相当于一个JavaBean,用来存放一个web模块运行时所需要的配置信息。当 然,一个web模块可以拥有多个ModuleConfig,但是缺省的是prefix长度为0的ModuleConifg。它 的每个属性几乎都是由HashMap组成的,它通过一个configured布尔值来描述当前的ModuleConfig是否已经被初始化完毕,在每存放一个属性的时候都会监测这个值。如果初始化完毕而还要改变里面的属性值,则会报出IllegalStateException(&Configuration is frozen&)异常,
现在对它的属性简单说明如下:
// 这个HashMap用来存储ActionConfig对象。
protected HashMap actionConfigs:
//HashMap用来存储DataSourceConfig对象。
protected HashMap dataSources
//这个HashMap用来存储ExceptionConfig对象。
protected HashMap exceptions
//这个HashMap用来存储FormBeanConfig对象。
protected HashMap formBeans
//这个HashMap用来存储ForwardConfig对象。
protected HashMap forwards
//这个HashMap用来存储MessageResourcesConfig对象。
protected HashMap messageResources
//这个HashMap用来存储PlugInConfig对象。
protected ArrayList plugIns
//ControllerConfig类
protected ControllerConfig controllerConfig
//标志这个ModuleConfig是(true)否(false)配置完成。
protected boolean configured
//用来标志和区分ModuleConfig类,同时在使用上面的config类初始化相应的资源以后,也是通过这个prefix来区分所属的不同的web模块。
protected String prefix
//ActionMapping类名,缺省为org.apache.struts.action.ActionMapping。[
protected String actionMappingClass = &org.apache.struts.action.ActionMapping&
// 这个HashMap用来存储ActionConfig对象。
protected HashMap actionConfigs:
//HashMap用来存储DataSourceConfig对象。
protected HashMap dataSources
//这个HashMap用来存储ExceptionConfig对象。
protected HashMap exceptions
//这个HashMap用来存储FormBeanConfig对象。
protected HashMap formBeans
//这个HashMap用来存储ForwardConfig对象。
protected HashMap forwards
//这个HashMap用来存储MessageResourcesConfig对象。
protected HashMap messageResources
//这个HashMap用来存储PlugInConfig对象。
protected ArrayList plugIns
//ControllerConfig类
protected ControllerConfig controllerConfig
//标志这个ModuleConfig是(true)否(false)配置完成。
protected boolean configured
//用来标志和区分ModuleConfig类,同时在使用上面的config类初始化相应的资源以后,也是通过这个prefix来区分所属的不同的web模块。
protected String prefix
//ActionMapping类名,缺省为org.apache.struts.action.ActionMapping。[
protected String actionMappingClass = &org.apache.struts.action.ActionMapping&
ModuleConfigImpl类的ModuleConfigImpl方法如下
public ModuleConfigImpl(String prefix) {
this.prefix =
this.actionConfigs = new HashMap();
this.actionConfigList = new ArrayList();
this.actionFormBeanClass = &org.apache.struts.action.ActionFormBean&;
this.actionMappingClass = &org.apache.struts.action.ActionMapping&;
this.actionForwardClass = &org.apache.struts.action.ActionForward&;
this.configured = false;
this.controllerConfig = null;
this.dataSources = new HashMap();
this.exceptions = new HashMap();
this.formBeans = new HashMap();
this.forwards = new HashMap();
this.messageResources = new HashMap();
this.plugIns = new ArrayList();
public ModuleConfigImpl(String prefix) {
this.prefix =
this.actionConfigs = new HashMap();
this.actionConfigList = new ArrayList();
this.actionFormBeanClass = &org.apache.struts.action.ActionFormBean&;
this.actionMappingClass = &org.apache.struts.action.ActionMapping&;
this.actionForwardClass = &org.apache.struts.action.ActionForward&;
this.configured =
this.controllerConfig =
this.dataSources = new HashMap();
this.exceptions = new HashMap();
this.formBeans = new HashMap();
this.forwards = new HashMap();
this.messageResources = new HashMap();
this.plugIns = new ArrayList();
通过其默认工厂的实现,我们可以看到,其实例化了一个ModuleConfigImpl的对象,这是ModuleConfig的一种实现,也是当前struts的默认的实现。
这是初始化过程开始逐渐明朗.
调用过程factoryObject.createModuleConfig(prefix)---&DefaultModuleConfigFactory 的createModuleConfig(prefix)----&new ModuleConfigImpl(prefix),但好像还有一个问题,ModuleConfigImpl类的ModuleConfigImpl方法里对其属性都是new的,没赋值啊?后来仔细看了半天,发现在initModuleConfig方法里还有几行代码
Digester digester = initConfigDigester();
igester.push(config);
this.parseModuleConfigFile(digester, path);
Digester digester = initConfigDigester();
digester.push(config);
this.parseModuleConfigFile(digester, path);
应该是digster携带config实例在parseModuleConfigFile方法里初始化好了.
五.UserModuleConfigFactory
如果是用户配置了实现工厂的话,可能的实现就是:
public class UserModuleConfigFactory extends ModuleConfigFactory implements Serializable{
public ModuleConfig createModuleConfig(String prefix) {
return new ModuleConfigUserImpl(prefix);
public class UserModuleConfigFactory extends ModuleConfigFactory implements Serializable{
public ModuleConfig createModuleConfig(String prefix) {
return new ModuleConfigUserImpl(prefix);
&&& 当然,如果要启用你的工厂的话,那么还要在你的配置文件中添加如下部分,在web.xml中修改如下部分:
&servlet-name&action&/servlet-name&
&servlet-class&org.apache.struts.action.ActionServlet&/servlet-class&
&init-param&
&param-name&config&/param-name&
&param-value&/WEB-INF/struts-config.xml&/param-value&
&/init-param&
&init-param&
&param-name&debug&/param-name&
&param-value&3&/param-value&
&/init-param&
&init-param&
&param-name&detail&/param-name&
&param-value&3&/param-value&
&/init-param&
&init-param&
&param-name&configFactory&/param-name&
&param-value&org.aa.struts. UserModuleConfigFactory &/param-value&
&/init-param&
&load-on-startup&0&/load-on-startup&
&/servlet&
&servlet-name&action&/servlet-name&
&servlet-class&org.apache.struts.action.ActionServlet&/servlet-class&
&init-param&
&param-name&config&/param-name&
&param-value&/WEB-INF/struts-config.xml&/param-value&
&/init-param&
&init-param&
&param-name&debug&/param-name&
&param-value&3&/param-value&
&/init-param&
&init-param&
&param-name&detail&/param-name&
&param-value&3&/param-value&
&/init-param&
&init-param&
&param-name&configFactory&/param-name&
&param-value&org.aa.struts. UserModuleConfigFactory &/param-value&
&/init-param&
&load-on-startup&0&/load-on-startup&
&/servlet&
这样的话,你的工厂就可以生效了,也可以生成你自己的配置模块的实例了。
到此,配置模块MoudelConfig的初始化也已经完成.
用手机扫描以上二维码直接访问此文。
系统分类:&>>&xUtils3的简单介绍-android100学习网
xUtils3的简单介绍
xUtils3的简介 xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能。 1.xUtils包含...
xUtils3的简介
xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,最近又发布了xUtil3.0,在增加新功能的同时又提高了框架的性能。
1.xUtils包含了很多实用的android工具; xUtils支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响;2.Utils 最低兼容Android 4.0 (api level 14);3.xUtils3变化较多所以建立了新的项目不在旧版(/wyouflf/xUtils)上继续维护, 相对于旧版本:
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略;
支持标准的Cookie策略, 区分domain, path;
事件注解去除不常用的功能, 提高性能;
数据库api简化提高性能, 达到和greenDao一致的性能;
图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示),
支持圆角, 圆形, 方形等裁剪, 支持自动旋转。
使用前的配置
1.使用Gradle构建时添加依赖即可:
compile 'org.xutils:xutils:3.3.36'
2.如果使用eclipse可以下载aar文件,然后用ZIP解压,取出jar包和so文件。3.混淆配置参考示例项目sample的配置。4.常见问题:
更好的管理图片缓存: /wyouflf/xUtils3/issues/149
Cookie的使用: /wyouflf/xUtils3/issues/125
关于query参数? http请求可以通过 header, url, body(请求体)传参; query参数是url中问号(?)后面的参数.
关于body参数? body参数只有PUT, POST, PATCH, DELETE(老版本RFC2616文档没有明确指出它是否支持, 所以暂时支持)请求支持.
自定义Http参数对象和结果解析: /wyouflf/xUtils3/issues/191
需要的权限
// 在application的onCreate中初始化
* 初始化xUtils3
public class MyApp extends Application {
public void onCreate() {
super.onCreate();
//对xUtils进行初始化
x.Ext.init(this);
//是否是开发、调试模式
x.Ext.setDebug(BuildConfig.DEBUG);//是否输出debug日志,开启debug会影响性能
在Manifest文件中注册MyApp
使用@Event事件注解(@ContentView,@ViewInject等)
xUtils3注解模块在实际开发中的使用如下:1.Activity的注解的使用如下:
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
@ViewInject(R.id.viewpager)
ViewPager viewP
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);
2.Fragment的注解的使用如下:
@ContentView(R.layout.fragment_http)
public class HttpFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return x.view().inject(this, inflater, container);
public void onViewCreated(View v, @Nullable Bundle savedInstanceState) {
super.onViewCreated(v, savedInstanceState);
3.为按钮设置点击事件
@ViewInject(R.id.bt_main)
Button bt_
protected void onCreate(Bundle savedInstanceState) {
* 用注解的方式为按钮添加点击事件,方法声明必须为private
* type默认View.OnClickListener.class,故此处可以简化不写,@Event(R.id.bt_main)
@Event(type = View.OnClickListener.class,value = R.id.bt_main)
private void testInjectOnClick(View v){
Snackbar.make(v,"OnClickListener",Snackbar.LENGTH_SHORT).show();
* 长按事件
@Event(type = View.OnLongClickListener.class,value = R.id.bt_main)
private boolean testOnLongClickListener(View v){
Snackbar.make(v,"testOnLongClickListener",Snackbar.LENGTH_SHORT).show();
xUtils3网络模块的使用
xUtils3网络模块大大方便了在实际开发中网络模块的开发,xUtils3网络模块大致包括GET请求、POST请求、如何使用其他请求方式、上传文件、下载文件、使用缓存等功能。1.GET请求
String url = "";
@Event(R.id.get)
private void get(View v){
final ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("请稍候...");
RequestParams params = new RequestParams(url);
params.addQueryStringParameter("username","abc");
params.addQueryStringParameter("password","123");
Callback.Cancelable cancelable = x.http().get(params, monCallback() {
public void onSuccess(String result) {
Log.i("JAVA", "onSuccess result:" + result);
progressDialog.cancel();
//请求异常后的回调方法
public void onError(Throwable ex, boolean isOnCallback) {
//主动调用取消请求的回调方法
public void onCancelled(CancelledException cex) {
public void onFinished() {
progressDialog.cancel();
//主动调用取消请求
cancelable.cancel();
2.POST请求
String url = "";
@Event(R.id.post)
private void post(View v){
RequestParams params = new RequestParams(url);
params.addBodyParameter("username","abc");
params.addParameter("password","123");
params.addHeader("head","android"); //为当前请求添加一个头
x.http().post(params, monCallback() {
public void onSuccess(String result) {
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
3.其他网络请求方式
String url = "";
@Event(R.id.other)
private void other(View v){
RequestParams params = new RequestParams(url);
params.addParameter("username","abc");
x.http().request(HttpMethod.PUT, params, monCallback() {
public void onSuccess(String result) {
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
4.上传文件
String url = "";
@Event(R.id.upload)
private void upload(View v){
String path="/mnt/sdcard/Download/icon.jpg";
RequestParams params = new RequestParams(url);
params.setMultipart(true);
params.addBodyParameter("file",new File(path));
x.http().post(params, monCallback() {
public void onSuccess(String result) {
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
5.下载文件
String url = "";
@Event(R.id.download)
private void download(View v){
url = "http://127.0.0.1/server/ABC.apk";
RequestParams params = new RequestParams(url);
//自定义保存路径,Environment.getExternalStorageDirectory():SD卡的根目录
params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/myapp/");
//自动为文件命名
params.setAutoRename(true);
x.http().post(params, new Callback.ProgressCallback() {
public void onSuccess(File result) {
//apk下载完成后,调用系统的安装方法
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive");
getActivity().startActivity(intent);
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
//网络请求之前回调
public void onWaiting() {
//网络请求开始的时候回调
public void onStarted() {
//下载的时候不断回调的方法
public void onLoading(long total, long current, boolean isDownloading) {
//当前进度和文件总大小
Log.i("JAVA","current:"+ current +",total:"+total);
6.使用缓存
String url = "";
@Event(R.id.cache)
private void cache(View v) {
RequestParams params = new RequestParams(url);
params.setCacheMaxAge(1000*60); //为请求添加缓存时间
Callback.Cancelable cancelable = x.http().get(params, new Callback.CacheCallback() {
public void onSuccess(String result) {
Log.i("JAVA","onSuccess:"+result);
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
//result:缓存内容
public boolean onCache(String result) {
//在setCacheMaxAge设置范围(上面设置的是60秒)内,如果再次调用GET请求,
//返回true:缓存内容被返回,相信本地缓存,返回false:缓存内容被返回,不相信本地缓存,仍然会请求网络
Log.i("JAVA","cache:"+result);
xUtils图片模块的使用
xUtils3图片模块,重点在于加载图片的4个bind方法,loadDrawable与loadFIle用法和ImageOptions用法。1.获取ImageView控件
@ViewInject(R.id.image01)
ImageView image01;
@ViewInject(R.id.image02)
ImageView image02;
@ViewInject(R.id.image03)
ImageView image03;
2.获取网络图片的地址
String[] urls={
"/a.jpg",
3.xUtils3显示图片方法setPic()如下:
private void setPic() {
* 通过ImageOptions.Builder().set方法设置图片的属性
ImageOptions options = new ImageOptions.Builder().setFadeIn(true).build(); //淡入效果
//ImageOptions.Builder()的一些其他属性:
//.setCircular(true) //设置图片显示为圆形
//.setSquare(true) //设置图片显示为正方形
//setCrop(true).setSize(200,200) //设置大小
//.setAnimation(animation) //设置动画
//.setFailureDrawable(Drawable failureDrawable) //设置加载失败的动画
//.setFailureDrawableId(int failureDrawable) //以资源id设置加载失败的动画
//.setLoadingDrawable(Drawable loadingDrawable) //设置加载中的动画
//.setLoadingDrawableId(int loadingDrawable) //以资源id设置加载中的动画
//.setIgnoreGif(false) //忽略Gif图片
//.setParamsBuilder(ParamsBuilder paramsBuilder) //在网络请求中添加一些参数
//.setRaduis(int raduis) //设置拐角弧度
//.setUseMemCache(true) //设置使用MemCache,默认true
* 加载图片的4个bind方法
x.image().bind(image01, urls[0]);
x.image().bind(image02, urls[1], options);
x.image().bind(image03, urls[2], options, monCallback() {
public void onSuccess(Drawable result) {
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
x.image().bind(image04, urls[3], options, monCallback() {
public void onSuccess(Drawable result) {
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
* loadDrawable()方法加载图片
Callback.Cancelable cancelable = x.image().loadDrawable(urls[0], options, monCallback() {
public void onSuccess(Drawable result) {
image03.setImageDrawable(result);
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
//主动取消loadDrawable()方法
//cancelable.cancel();
* loadFile()方法
* 应用场景:当我们通过bind()或者loadDrawable()方法加载了一张图片后,
* 它会保存到本地文件中,那当我需要这张图片时,就可以通过loadFile()方法进行查找。
* urls[0]:网络地址
x.image().loadFile(urls[0],options,new Callback.CacheCallback(){
public boolean onCache(File result) {
//在这里可以做图片另存为等操作
Log.i("JAVA","file:"+result.getPath()+result.getName());
//相信本地缓存返回true
public void onSuccess(File result) {
Log.i("JAVA","file");
public void onError(Throwable ex, boolean isOnCallback) {
public void onCancelled(CancelledException cex) {
public void onFinished() {
xUtils3数据库模块的使用
1.创建数据库和删除数据库首先进行配置DaoConfig:
* DaoConfig配置
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
//设置数据库名,默认xutils.db
.setDbName("myapp.db")
//设置表创建的监听
.setTableCreateListener(new DbManager.TableCreateListener() {
public void onTableCreated(DbManager db, TableEntity table){
Log.i("JAVA", "onTableCreated:" + table.getName());
//设置是否允许事务,默认true
//.setAllowTransaction(true)
//设置数据库路径,默认安装程序路径下
//.setDbDir(new File("/mnt/sdcard/"))
//设置数据库的版本号
//.setDbVersion(1)
//设置数据库更新的监听
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
public void onUpgrade(DbManager db, int oldVersion,
int newVersion) {
//设置数据库打开的监听
.setDbOpenListener(new DbManager.DbOpenListener() {
public void onDbOpened(DbManager db) {
//开启数据库支持多线程操作,提升性能
db.getDatabase().enableWriteAheadLogging();
DbManager db = x.getDb(daoConfig);
然后创建数据库表ChildInfo实体类:
* onCreated = "sql":当第一次创建表需要插入数据时候在此写sql语句
@Table(name = "child_info",onCreated = "")
public class ChildInfo {
* name = "id":数据库表中的一个字段
* isId = true:是否是主键
* autoGen = true:是否自动增长
* property = "NOT NULL":添加约束
@Column(name = "id",isId = true,autoGen = true,property = "NOT NULL")
@Column(name = "c_name")
private String cN
public ChildInfo(String cName) {
//默认的构造方法必须写出,如果没有,这张表是创建不成功的
public ChildInfo() {
public int getId() {
public void setId(int id) {
public String getcName() {
public void setcName(String cName) {
public String toString() {
return "ChildInfo{"+"id="+id+",cName='"+cName+'\''+'}';
再然后创建和删除数据库的操作都可以进行了
//创建数据库
@Event(R.id.create_db)
private void createDB(View v) throws DbException {
//用集合向child_info表中插入多条数据
ArrayList childInfos = new ArrayList();
childInfos.add(new ChildInfo("zhangsan"));
childInfos.add(new ChildInfo("lisi"));
childInfos.add(new ChildInfo("wangwu"));
childInfos.add(new ChildInfo("zhaoliu"));
childInfos.add(new ChildInfo("qianqi"));
childInfos.add(new ChildInfo("sunba"));
//db.save()方法不仅可以插入单个对象,还能插入集合
db.save(childInfos);
//删除数据库
@Event(R.id.del_db)
private void delDB(View v) throws DbException {
db.dropDb();
@Event(R.id.del_table)
private void delTable(View v) throws DbException {
db.dropTable(ChildInfo.class);
3.查询表中的数据
//查询表中的数据
@Event(R.id.select_table)
private void selelctDB(View v) throws DbException {
//查询数据库表中第一条数据
ChildInfo first = db.findFirst(ChildInfo.class);
Log.i("JAVA",first.toString());
//添加查询条件进行查询
//第一种写法:
WhereBuilder b = WhereBuilder.b();
b.and("id","&",2); //构造修改的条件
b.and("id","",2).and("id","
4.修改表中的数据
//修改表中的一条数据
@Event(R.id.update_table)
private void updateTable(View v) throws DbException {
//第一种写法:
ChildInfo first = db.findFirst(ChildInfo.class);
first.setcName("zhansan2");
db.update(first,"c_name"); //c_name:表中的字段名
//第二种写法:
WhereBuilder b = WhereBuilder.b();
b.and("id","=",first.getId()); //构造修改的条件
KeyValue name = new KeyValue("c_name","zhansan3");
db.update(ChildInfo.class,b,name);
//第三种写法:
first.setcName("zhansan4");
db.saveOrUpdate(first);
5.删除表中的数据
@Event(R.id.del_table_data)
private void delTableData(View v) throws DbException {
//第一种写法:
db.delete(ChildInfo.class); //child_info表中数据将被全部删除
//第二种写法,添加删除条件:
WhereBuilder b = WhereBuilder.b();
b.and("id","&",2); //构造修改的条件
b.and("id","}

我要回帖

更多关于 es6模块的导入和引入 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信