Android框架有很多,但是比较实用的框架莫过于XUtils了,因此,想和大家一起研究研究XUtils框架 XUtils如今有两个版本,分别是XUtils,和XUtils3,那么我们先来讲XUtils

XUtils的优点:xUtils 包含了很多实用的android工具。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响xUitls 最低兼容android 2.2 (api level 8)

XUtils的不足: 对Android 6.0兼容不是很好

XUtils3的优点: xUtils3支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响 xUtils3 最低兼容Android 4.0 (api level 14). (Android 2.3?)xUtils3变化较多所以建立了新的项目不在旧版(github.com/wyouflf/xUtils)上继续维护, 相对于旧版本: HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略. 支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的性能. 图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转

但是,在使用这个框架的时候,我们需要提前导入依赖包,在没有升级之前是需要我们自己去手动下载导入的,升级之后,我们可以直接在注入在项目的gradle文件里面,在使用Gradle构建时添加一下依赖即可:compile 'org.xutils:xutils:3.3.42'

升级之后,我们使用前还需要配置以及初始化:

使用前配置需要的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />



初始化

// 在application的onCreate中初始化
@Override
public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
    ...
}



现在,我们来写一个登录,测试一下,这个框架是否能用:

main.xml:(写两个编辑框输入用户名admin以及密码123,设置一个登录按钮)


<EditText
        android:id="@+id/et_main_uname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="admin" />

    <EditText
        android:id="@+id/et_main_upass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="123456" />

    <Button
        android:id="@+id/btn_main_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录" />



main.activity


public class MainActivity extends AppCompatActivity {

    @ViewInject(R.id.et_main_uname)
    private EditText et_main_uname;
    @ViewInject(R.id.et_main_upass)
    private EditText et_main_upass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        x.view().inject(this);
    }

    @Event(value = R.id.btn_main_login,type = View.OnClickListener.class)
    private void login(View view){
        //获取文本框的值(用户名和密码)
        String name=et_main_uname.getText().toString();
        String pass=et_main_upass.getText().toString();

        //发送请求
        RequestParams params=new RequestParams("http://192.168.42.169:8080/G150725_S2SH/loginActionlogin.action");
        params.addParameter("uname",name);
        params.addParameter("upass",pass);
        x.http().post(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
            }

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

            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });


    }
}