Xutils3.+框架的基本使用操作

来源:互联网 发布:解压软件winrar官网 编辑:程序博客网 时间:2024/06/06 18:32

Xutils3主要包括:xUtils加载图片功能、xUtils操作数据库、xUtils的网络请求和xUtils注解。xUtils的使用需要我们在清单文件中添加如下的权限:

<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
必须创建自己的Application类,代码如下:
import org.xutils.x;
import android.app.Application;
public class AppContext extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);// xUtils初始化
x.Ext.setDebug(true);// 显示log日志
}
}
在清单文件的 application中添加下面的代码:
 android:name="com.example.xutilsdemo.AppContext"
以上内容是使用xUtils必须要做的,下面将逐一介绍四大模块的使用。

1.xUtils注解

xUtils的注解主要包括:@ContentView加载布局、@InjectView 控件注解、@Envent 控件的响应事件

在使用注解时需先在Activity的oncreate方法中加入下面代码: 
x.view().inject(this); //初始化

示例代码:

(1)对Activity的注解

@ContentView(R.layout.activity_main) // 加载布局文件
public class MainActivity extends Activity {
@ViewInject(R.id.btn)
private Button btn;// 控件注解
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);// 初始化
}
// 等同于@Event(value=R.id.btn_get,type=View.OnClickListener.class)
@Event(value = R.id.btn)
private void getButtonEvent(View v) {
switch (v.getId()) {
case R.id.btn:
Toast.makeText(getApplicationContext(), "点我了", Toast.LENGTH_SHORT).show();
break;
}
}
}
需要注意的是@Event这个注解默认情况下type属性为View.OnClickListener.class.如果你想实现其它点击事件,只需要把type值进行修改即可。另外需要注意的一点是按钮的点击事件必须用private进行修饰。

(2)对Fragment的注解

@ContentView(R.layout.fragment)
public class FragDemo extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return x.view().inject(this, inflater, container);
}
}

在对Fragment的注解中其他对控件的注解与Activity中的一致。

2.xUtils网络请求

这个没有什么多说的,直接看代码就ok了

示例代码:

(1)Post请求

RequestParams params = new RequestParams(path);

                params.addBodyParameter("name", "admin");
params.addBodyParameter("pass", "111");//添加参数
x.http().post(params, new CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
// 请求成功
}
});

(2) Get请求

RequestParams params = new RequestParams(path);
params.addQueryStringParameter("name", "admin");
params.addQueryStringParameter("pass", "111");// 添加参数
x.http().get(params, new CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
// 请求成功
}
});

(3) 上传文件

String path="/mnt/sdcard/Download/icon.jpg";
    RequestParams params =new RequestParams(url);
    params.setMultipart(true);
    params.addBodyParameter("file",newFile(path));
    x.http().post(params,newCallback.CommonCallback<string>() {
       
@Override
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
// 请求成功
}
    });
(4)文件下载

 url = "http://localhost/server/ABC.apk";
    RequestParams params = newRequestParams(url);
    //自定义保存路径,Environment.getExternalStorageDirectory():SD卡的根目录
    params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/app/");
    //自动为文件命名
    params.setAutoRename(true);
    x.http().post(params,newCallback.ProgressCallback<file>() {
        @Override
        publicvoid onSuccess(File result) {
            //apk下载完成后,调用系统的安装方法
            Intent intent = newIntent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(result),"application/vnd.android.package-archive");
            getActivity().startActivity(intent);
        }
      
@Override
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}

@Override
public void onSuccess(String arg0) {

  //apk下载完成后,调用系统的安装方法
            Intent intent = newIntent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(result),"application/vnd.android.package-archive");
            getActivity().startActivity(intent);
}
    });
3.xUtils加载图片

privatevoid setPic() {
    /**
     * 通过ImageOptions.Builder().set方法设置图片的属性
     */
    ImageOptions options = newImageOptions.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, newCallback.CommonCallback<drawable>() {
        @Override
        publicvoid onSuccess(Drawable result) {
        }
        @Override
        publicvoid onError(Throwable ex, booleanisOnCallback) {
        }
        @Override
        publicvoid onCancelled(CancelledException cex) {
        }
        @Override
        publicvoid onFinished() {
        }
    });
    x.image().bind(image04, urls[3], options, newCallback.CommonCallback<drawable>() {
        @Override
        publicvoid onSuccess(Drawable result) {
        }
        @Override
        publicvoid onError(Throwable ex, booleanisOnCallback) {
        }
        @Override
        publicvoid onCancelled(CancelledException cex) {
        }
        @Override
        publicvoid onFinished() {
        }
    });
 
    /**
     * loadDrawable()方法加载图片
     */
    Callback.Cancelable cancelable = x.image().loadDrawable(urls[0], options, newCallback.CommonCallback<drawable>() {
        @Override
        publicvoid onSuccess(Drawable result) {
            image03.setImageDrawable(result);
        }
        @Override
        publicvoid onError(Throwable ex, booleanisOnCallback) {
        }
        @Override
        publicvoid onCancelled(CancelledException cex) {
        }
        @Override
        publicvoid onFinished() {
        }
    });
    //主动取消loadDrawable()方法
    //cancelable.cancel();
 
    /**
     * loadFile()方法
     * 应用场景:当我们通过bind()或者loadDrawable()方法加载了一张图片后,
     * 它会保存到本地文件中,那当我需要这张图片时,就可以通过loadFile()方法进行查找。
     * urls[0]:网络地址
     */
    x.image().loadFile(urls[0],options,newCallback.CacheCallback<file>(){
        @Override
        publicboolean onCache(File result) {
            //在这里可以做图片另存为等操作
            Log.i("JAVA","file:"+result.getPath()+result.getName());
            returntrue;//相信本地缓存返回true
        }
        @Override
        publicvoid onSuccess(File result) {
            Log.i("JAVA","file");
        }
        @Override
        publicvoid onError(Throwable ex, booleanisOnCallback) {
        }
        @Override
        publicvoid onCancelled(CancelledException cex) {
        }
        @Override
        publicvoid onFinished() {
        }
    });
}
4.xUtils操作数据库

先配置DaoConfig:

DbManager.DaoConfig daoConfig = newDbManager.DaoConfig()
        //设置数据库名,默认xutils.db
        .setDbName("app.db")
        //设置表创建的监听
        .setTableCreateListener(newDbManager.TableCreateListener() {
            @Override
            publicvoid onTableCreated(DbManager db, TableEntity<!--?--> table){
                
            }
        })
        //设置是否允许事务,默认true
        //.setAllowTransaction(true)
        //设置数据库路径,默认安装程序路径下
        //.setDbDir(new File("/mnt/sdcard/"))
        //设置数据库的版本号
        //.setDbVersion(1)
        //设置数据库更新的监听
        .setDbUpgradeListener(newDbManager.DbUpgradeListener() {
            @Override
            publicvoid onUpgrade(DbManager db, intoldVersion,
                    intnewVersion) {
            }
        })
        //设置数据库打开的监听
        .setDbOpenListener(newDbManager.DbOpenListener() {
            @Override
            publicvoid onDbOpened(DbManager db) {
                //开启数据库支持多线程操作,提升性能
                db.getDatabase().enableWriteAheadLogging();
            }
        });
DbManager db = x.getDb(daoConfig);

然后创建数据库表ChildInfo的实体类:

@Table(name = "child_info",onCreated = "")
publicclass ChildInfo {
    /**
     * name = "id":数据库表中的一个字段
     * isId = true:是否是主键
     * autoGen = true:是否自动增长
     * property = "NOT NULL":添加约束
     */
    @Column(name = "id",isId = true,autoGen = true,property = "NOT NULL")
    privateint id;
    @Column(name = "c_name")
    privateString cName;
 
    publicChildInfo(String cName) {
        this.cName = cName;
    }
    //默认的构造方法必须写出,如果没有,这张表是创建不成功的
    publicChildInfo() {
    }
    publicint getId() {
        returnid;
    }
    publicvoid setId(intid) {
        this.id = id;
    }
    publicString getcName() {
        returncName;
    }
    publicvoid setcName(String cName) {
        this.cName = cName;
    }
    @Override
    publicString toString() {
        return"ChildInfo{"+"id="+id+",cName='"+cName+'\''+'}';
    }
}
创建和删除数据库的操作了:

@Event(R.id.create_db)
privatevoid createDB(View v) throwsDbException {
    //用集合向child_info表中插入多条数据
    ArrayList<childinfo> childInfos = newArrayList<>();
    childInfos.add(newChildInfo("zhangsan"));
    childInfos.add(newChildInfo("lisi"));
    childInfos.add(newChildInfo("wangwu"));
    childInfos.add(newChildInfo("zhaoliu"));
    childInfos.add(newChildInfo("qianqi"));
    childInfos.add(newChildInfo("sunba"));
    //db.save()方法不仅可以插入单个对象,还能插入集合
    db.save(childInfos);
}
 
//删除数据库
@Event(R.id.del_db)
privatevoid delDB(View v) throwsDbException {
    db.dropDb();
}
//删除表
@Event(R.id.del_table)
privatevoid delTable(View v) throwsDbException {
    db.dropTable(ChildInfo.class);
}
//查询数据
@Event(R.id.select_table)
privatevoid selelctDB(View v) throwsDbException {
    //查询数据库表中第一条数据
    ChildInfo first = db.findFirst(ChildInfo.class);
    Log.i("JAVA",first.toString());
    //添加查询条件进行查询
    //第一种写法:
    WhereBuilder b = WhereBuilder.b();
    b.and("id",">",2);//构造修改的条件
    b.and("id","<",4);
    List<childinfo> all = db.selector(ChildInfo.class).where(b).findAll();//findAll():查询所有结果
    for(ChildInfo childInfo :all){
        Log.i("JAVA",childInfo.toString());
    }
    //第二种写法:
    List<childinfo> all = db.selector(ChildInfo.class).where("id",">",2).and("id","<",4).findAll();
    for(ChildInfo childInfo :all){
        Log.i("JAVA",childInfo.toString());
    }
}
//修改数据
@Event(R.id.update_table)
privatevoid updateTable(View v) throwsDbException {
    //第一种写法:
    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 = newKeyValue("c_name","zhansan3");
    db.update(ChildInfo.class,b,name);
    //第三种写法:
    first.setcName("zhansan4");
    db.saveOrUpdate(first);
}
//删除表中的数据
@Event(R.id.delete_data)
privatevoid delTableData(View v) throwsDbException {
    //第一种写法:
    db.delete(ChildInfo.class);//child_info表中数据将被全部删除
    //第二种写法,添加删除条件:
    WhereBuilder b = WhereBuilder.b();
    b.and("id",">",2);//构造修改的条件
    b.and("id","<",4);
    db.delete(ChildInfo.class, b);
}

参考文献:http://www.2cto.com/kf/201607/524976.html

?
0 0
原创粉丝点击