xUtils

Xutils框架作用:

构建快速互联网开发中小型项目基石,gradle部署,一行代码解决项目中的网络请求,图片加载,本地缓存以及注解查询控件等功能,基于XUtils可实现咨询项目,电商项目,社区项目的快速开发上线。

注解的理解:

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

1、元注解

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

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

1.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 可以有多个,一个注解可以为类的,方法的,字段的等等。

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

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

ViewUtils使用:

注解模块
https://blog.csdn.net/JKjiang123/article/details/78641629
@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)
关联点击事件

自动安装apk

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);

自定义类继承Application

package com.example.day1_xutils;

import android.app.Application;

import org.xutils.x;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(true);//允许debug运行
        x.Ext.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;//忽略http校验
            }
        });
    }
}

清单文件注册
在这里插入图片描述

一些具体操作

package com.example.day1_xutils;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
//查找视图的注解
@ContentView(R.layout.layout_view)
public class viewAction extends Activity {
    //查找控件的注解
    @ViewInject(R.id.but_dan)
    Button but_dan;

    @ViewInject(R.id.but_long)
    Button but_long;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定视图
        x.view().inject(this);
//        but_dan.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//            }
//        });
//        but_long.setOnLongClickListener(new View.OnLongClickListener() {
//            @Override
//            public boolean onLongClick(View v) {
//                return true;
//            }
//        });


    }
    //点击事件的注解  一定要是私有,和原生一样
    @Event(value = R.id.but_dan, type = View.OnClickListener.class)
    private void onClick(View view) {
        Toast.makeText(this, "你点击了", Toast.LENGTH_SHORT).show();
    }

    @Event(value = R.id.but_long, type = View.OnLongClickListener.class)
    private boolean onLongClick(View view) {
        Toast.makeText(this, "你长按了", Toast.LENGTH_SHORT).show();
        return true;
    }

}

数据库的应用

package com.example.day1_xutils;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;

import org.xutils.DbManager;
import org.xutils.ex.DbException;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.x;

import java.util.List;

@ContentView(R.layout.layout_db)
public class dbAction extends Activity {
    private DbManager.DaoConfig daoConfig;
    private DbManager dbManager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定视图
        x.view().inject(this);
        //初始化数据库
        daoConfig = new DbManager.DaoConfig();
        //设置数据库名
        daoConfig.setDbName("UserDao");
        //设置版本号
        daoConfig.setDbVersion(1);
        //获取数据库管理者
        dbManager = x.getDb(daoConfig);

    }

    @Event(value = {R.id.but_read,R.id.but_write},type = View.OnClickListener.class)
    private void onClick(View v){
        switch (v.getId()){
            case R.id.but_read:
                read();
                break;
            case R.id.but_write:
                write();
                break;
        }
    }

    private void write() {
        UserDao userDao = new UserDao();
        userDao.setName("张新浩");
        userDao.setAge(17);
        userDao.setId(1);

        UserDao userDao1 = new UserDao();
        userDao1.setName("张新浩2");
        userDao1.setAge(18);
        userDao1.setId(2);
        try {
            //保存,多个要更新
            dbManager.save(userDao);
            dbManager.saveOrUpdate(userDao1);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    private void read() {
        try {
            //查找第一个
            UserDao first = dbManager.selector(UserDao.class).findFirst();
            Log.d("zxh",first.toString());
            //按照id查找
            UserDao byId = dbManager.findById(UserDao.class, 2);
            Log.d("zxh2",byId.toString());
            //查询所有
            List<UserDao> all = dbManager.selector(UserDao.class).findAll();
        } catch (DbException e) {
            e.printStackTrace();
        }

    }

}

dao

package com.example.day1_xutils;

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
//表名的注解
@Table(name = "UserDao")
public class UserDao {
    //列名的注解,是否自增
    @Column(name = "id", isId = true)
    private int id;
    @Column(name = "name")
    private String name;
    @Column(name = "age")
    private int age;

    @Override
    public String toString() {
        return "UserDao{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", 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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个Android基于快速开发的一个框架 xUtils 它是在aFinal基础上进行重构和扩展的框架 相比aFinal有很大的改善 同时 如果如果你的应用是基于网络的 那么只要处理得当 它会让你彻底的摆脱各种工具类和重复代码的困扰 xUtils 包含了很多实用的android工具 xUtils 源于Afinal框架 对Afinal进行了大量重构 使得xUtils支持大文件上传 更全面的http请求协议支持 拥有更加灵活的ORM 更多的事件注解支持且不受混淆影响 xUtils的四大组件: 一 ViewUtils 你受够了重复冗长的findViewById了嘛 你受够了各种监听事件的绑定了嘛 在这里 你只需要一句注解 如@ViewInject @OnClick 就能轻松摆脱小白似的代码 大大的上了一个档次 二 HttpUtils 支持的HTTP七种请求方式 非常便捷的满足你的接口请求的需要 同时还支持大文件上传下载 以及同步异步请求 三 BitmapUtils 你的程序因OOM强制关闭过嘛 你在为加在网络图片头疼嘛 有了组件 你将永久摆脱前面的问题 四 DbUtils 简单易用又出色的ORM框架 真的是谁用谁知道 直接轻松存储各种对象到sqlite数据库中 同时也能非常方便的进行各种条件查询 甚至分页查询 还有对表中数据的更新删除等操作 真正的实现 一行代码就可以进行增删改查 并且可通过注解自定义表名 列名 外键 唯一性约束 NOT NULL约束 CHECK约束等 支持事务 摘自github ">一个Android基于快速开发的一个框架 xUtils 它是在aFinal基础上进行重构和扩展的框架 相比aFinal有很大的改善 同时 如果如果你的应用是基于网络的 那么只要处理得当 它会让你彻底的摆脱各种工具类和重复代码的困扰 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值