Xutils框架

注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据),常见的作用有以下几种:
• 生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等
• 跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。也是
• 在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

元注解是指注解的注解。包括 @Retention @Target @Document @Inherited四种。

1、@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE)//注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)// 默认的保留策略,注解会在class字节码文件中存在,但运行时无法得
@Retention(RetentionPolicy.RUNTIME)// 注解会在class字节码文件中存在,在运行时可以通过反射获取到

2、@Target:定义注解的作用目标
其定义的源码为:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字,由以上的源码可以知道,他的elementType 可以有多个,一个注解可以为类的,方法的,字段的等等。

3、@Document:说明该注解将被包含在javadoc中

4、@Inherited:说明子类可以继承父类中的该注解

ViewUtils使用:
方法命名一定要private 方法里面的参数,是谁的方法传入谁
注解模块
@ContentView(R.layout.activity_view)关联xml布局
oncreate方法中x.view().inject(this);绑定activity
@ViewInject(R.id.ViewContentTv)初始化控件相当于findViewById
@Event(value = R.id.ViewClickBtn,type = View.OnClickListener.class)关联点击事件

依赖

implementation 'org.xutils:xutils:3.5.1'

自定义Application
x.Ext.init(this);开启xutils
x.Ext.setDebug(true);

点击

//方法命名一定要private 方法里面的参数,是谁的方法传入谁
    @Event({R.id.btnClick})
    private void getClick(View view){
     Toast.makeText(this, "点击", Toast.LENGTH_SHORT).show();
    }

长按点击

 @Event(value = R.id.btnLongClick,type = View.OnLongClickListener.class)
    private boolean getlongClick(View view){
        Toast.makeText(this, "长按点击", Toast.LENGTH_SHORT).show();
        return  true;
    }

CheckBox

@Event(value = R.id.cb_check,type = CompoundButton.OnCheckedChangeListener.class)
    private void getcheckBox(CompoundButton compoundButton,Boolean b){
        if (b){
            Toast.makeText(this, "选中了", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(this, "取消了", Toast.LENGTH_SHORT).show();
        }

    }

在这里插入图片描述

HttpUtils post get Bitmap

@ContentView(R.layout.activity_http)
public class HttpActivity extends AppCompatActivity {

@ViewInject(R.id.iv1)
ImageView imageView;

static final String str="http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=10&page=1";
static final String url="http://www.qubaobei.com/ios/cf/dish_list.php?";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_http);

    x.view().inject(this);
}
@Event({R.id.b1,R.id.b2,R.id.b3})
private void gethttpget(View view){
    switch (view.getId()){
        case R.id.b1:
            getData();
            break;
        case R.id.b2:
            postData();
            break;
        case R.id.b3:
            x.image().bind(imageView,"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1681359583,1850186605&fm=27&gp=0.jpg");
            break;
            default:
                break;
    }
}

private void postData() {
    RequestParams requestParams = new RequestParams();
    requestParams.setUri(url);
    requestParams.addBodyParameter("stage_id","1");
    requestParams.addBodyParameter("limit","10");
    requestParams.addBodyParameter("page","2");
    x.http().post(requestParams, new Callback.CacheCallback<String>() {
        @Override
        public void onSuccess(String result) {
            Toast.makeText(HttpActivity.this, result, Toast.LENGTH_SHORT).show();
            Log.e("###post",result);
        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {

        }

        @Override
        public void onCancelled(CancelledException cex) {

        }

        @Override
        public void onFinished() {

        }

        @Override
        public boolean onCache(String result) {
            return false;
        }
    });
}

private void getData() {
    //设置请求参数
    RequestParams requestParams = new RequestParams(str);
    x.http().get(requestParams, new Callback.CacheCallback<String>() {

        //请求成功
        @Override
        public void onSuccess(String result) {
            Log.e("#####",result);
            Toast.makeText(HttpActivity.this, "成功", Toast.LENGTH_SHORT).show();
        }

        //请求错误
        @Override
        public void onError(Throwable ex, boolean isOnCallback) {

        }

        //取消
        @Override
        public void onCancelled(CancelledException cex) {

        }
        //完成请求
        @Override
        public void onFinished() {

        }
        @Override
        public boolean onCache(String result) {
            return false;
        }

    });
}
}

在这里插入图片描述

下载 断点续传

@ContentView(R.layout.activity_down_load)
public class DownLoadActivity extends AppCompatActivity {
    private static final String SAVERATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/qq.apk";
    ProgressDialog progressDialog;
    static final String str="http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk";
    @ViewInject(R.id.downLoad)
    Button button;
    Callback.Cancelable cancelable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_down_load);

    x.view().inject(this);
    initProgressDialog();
}
//创建一个带进度条的dialog
private void initProgressDialog(){
    progressDialog = new ProgressDialog(this);

    progressDialog.setTitle("下载apk");
    progressDialog.setMessage("下载中....");
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setCanceledOnTouchOutside(false);

    progressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "暂停", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            cancelable.cancel();
        }
    });
}
@Event(R.id.downLoad)
private void getclick(View view){
    download();
}

private void download() {
    RequestParams requestParams = new RequestParams();
    requestParams.setUri(str);
    //设置可以断点续传
    requestParams.setAutoRename(true);

    requestParams.setCancelFast(true);
    requestParams.setSaveFilePath(SAVERATH);
    cancelable = x.http().get(requestParams, new Callback.ProgressCallback<File>() {
        @Override
        public void onSuccess(File result) {
            Toast.makeText(DownLoadActivity.this, "下载成功"+result.getAbsolutePath(), Toast.LENGTH_SHORT).show();

            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(result),"application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            DownLoadActivity.this.startActivity(intent);
        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {

        }

        @Override
        public void onCancelled(CancelledException cex) {

        }

        @Override
        public void onFinished() {
            progressDialog.cancel();
        }

        @Override
        public void onWaiting() {

        }

        @Override
        public void onStarted() {
            progressDialog.show();
        }

        @Override
        public void onLoading(long total, long current, boolean isDownloading) {
            progressDialog.setProgress((int) (current * 100 / total));

        }
    });
}
}

在这里插入图片描述

DBUtils 数据库

@ContentView(R.layout.activity_db)
public class DBActivity extends AppCompatActivity {

@ViewInject(R.id.tv1)
TextView textView;

List<FoodBean> list = new ArrayList<>();

DbManager db;
FoodBean food;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_db);

    x.view().inject(this);
    downLoad();

    DbManager.DaoConfig daoConfig = new DbManager.DaoConfig();
    daoConfig.setDbName("x1702");
    daoConfig.setDbVersion(1);
    db = x.getDb(daoConfig);


}
@Event({R.id.insert,R.id.seacher})
private void get(View view){
    switch (view.getId()){
        case R.id.insert:
            insert();
            break;
        case R.id.seacher:
            seacher();
            break;
    }
}

private void seacher() {
    try {
        List<Food> all = db.findAll(Food.class);
        StringBuilder sb = new StringBuilder();
        for (Food f: all) {
            sb.append(f).append("\n");
        }
        textView.setText(sb.toString());
        Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
        Log.e("#####",sb.toString());
    } catch (DbException e) {
        e.printStackTrace();
    }
}

private void insert() {


    for (int i=0;i<list.size();i++){
        Food food1 = new Food();
        FoodBean foodBean = list.get(i);
        food1.setTitle(foodBean.title);
        food1.setId(i);
        food1.setFood_str(foodBean.food_str);
        try {
            db.save(food1);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }



    Toast.makeText(this, "成功", Toast.LENGTH_SHORT).show();


}
private void downLoad() {
    RequestParams requestParams = new RequestParams();
    requestParams.setUri("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=10&page=1");
    x.http().get(requestParams, new Callback.CacheCallback<String>() {
        @Override
        public void onSuccess(String result) {
            try {
                JSONObject jsonObject = new JSONObject(result);
                JSONArray data = jsonObject.getJSONArray("data");
                for (int i=0;i<data.length();i++){
                    JSONObject jsonObject1 = data.getJSONObject(i);
                    String title = jsonObject1.getString("title");
                    String food_str = jsonObject1.getString("food_str");
                    food = new FoodBean(title,food_str);
                    list.add(food);
                    Log.e("####",list+"");
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {

        }

        @Override
        public void onCancelled(CancelledException cex) {

        }

        @Override
        public void onFinished() {

        }

        @Override
        public boolean onCache(String result) {
            return false;
        }
    });
}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xUtils简介 xUtils 包含了很多实用的android工具 xUtils 最初源于Afinal框架 进行了大量重构 使得xUtils支持大文件上传 更全面的http请求协议支持 10种谓词 拥有更加灵活的ORM 更多的事件注解支持且不受混淆影响 xUitls最低兼容android 2 2 api level 8 目前xUtils主要有四大模块: DbUtils模块: android中的orm框架 一行代码就可以进行增删改查; 支持事务 默认关闭; 可通过注解自定义表名 列名 外键 唯一性约束 NOT NULL约束 CHECK约束等(需要混淆的时候请注解表名和列名); 支持绑定外键 保存实体时外键关联实体自动保存或更新; 自动加载外键关联实体 支持延时加载; 支持链式表达查询 更直观的查询语义 参考下面的介绍或sample中的例子 ViewUtils模块: android中的ioc框架 完全注解方式就可以进行UI 资源和事件绑定; 新的事件绑定方式 使用混淆工具混淆后仍可正常工作; 目前支持常用的20种事件绑定 参见ViewCommonEventListener类和包com lidroid xutils view annotation event HttpUtils模块: 支持同步 异步方式的请求; 支持大文件上传 上传大文件不会oom; 支持GET POST PUT MOVE COPY DELETE HEAD OPTIONS TRACE CONNECT请求; 下载支持301 302重定向 支持设置是否根据Content Disposition重命名下载的文件; 返回文本内容的请求 默认只启用了GET请求 支持缓存 可设置默认过期时间和针对当前请求的过期时间 BitmapUtils模块: 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象; 支持加载网络图片和本地图片; 内存管理使用lru算法 更好的管理bitmap内存; 可配置线程加载线程数量 缓存大小 缓存路径 加载显示动画等 ">xUtils简介 xUtils 包含了很多实用的android工具 xUtils 最初源于Afinal框架 进行了大量重构 使得xUtils支持大文件上传 更全面的http请求协议支持 10种谓词 拥有更加灵活的ORM 更多的事件注解支持且不受混淆影响 xUitls最低兼 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值