-
简介
xUtils3 是 xUtils 的升级版,功能和性能都在提高,xUtils3 主要有四大模块:注解模块,联 网模块,图片加载模块,数据库模块;注解模块: 用于在 Activity 或者 Fragment 中初始化布局文件,便于代码更加简洁;
联网模块: xUtils3 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词), 拥有更加灵活的 ORM,更多的事件注解支持且不受混淆影响;
图片加载模块: 加载图片很方便并且不用担心内存溢出,还可以图片绑定支持 gif(受系统兼容 性影响, 部分 gif 文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转.
数据库模块: 数据库 api 简化提高性能, 达到和 greenDao 一致的性能 -
使用方法参考地址:https://github.com/wyouflf/xUtils3
Demo展示
添加依赖: compile ‘org.xutils:xutils:3.8.3’
Application:
package com.example.dell.myapplication;
import android.app.Application;
import org.xutils.x;
/**
* Created by dell on 2020/1/6.
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(true);// 是否输出debug日志, 开启debug会影响性能.
}
}
MainActivity:
package com.example.dell.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
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.activity_main)
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main2);
x.view().inject(this);
}
@Event(value ={ R.id.btn_annotation,R.id.btn_net,R.id.btn_image,R.id.btn_image_list})
private void getEvent(View view){
switch (view.getId()){
case R.id.btn_annotation:
// Toast.makeText(this,"注解模块",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(this,MyFragmentActivity.class);
startActivity(intent);
break;
case R.id.btn_net:
intent = new Intent(this, XUtils3NetActivity.class);
startActivity(intent);
// Toast.makeText(this,"网络模块",Toast.LENGTH_SHORT).show();
break;
case R.id.btn_image:
Toast.makeText(this,"加载单张图片",Toast.LENGTH_SHORT).show();
break;
case R.id.btn_image_list:
Toast.makeText(this,"加载列表图片",Toast.LENGTH_SHORT).show();
break;
}
}
}
MyFragmentActivity:
package com.example.dell.myapplication;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.TextView;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
/**
* Created by dell on 2020/1/6.
*/
@ContentView(R.layout.activity_xutils3_fragment)
public class MyFragmentActivity extends FragmentActivity {
@ViewInject(R.id.tv_title)
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);
textView.setText("在Fragment中使用注解");
//1.得到FragmentManger
FragmentManager fm = getSupportFragmentManager();
//2.开启事务
FragmentTransaction tt = fm.beginTransaction();
//3.替换Fragment
tt.replace(R.id.fl_content,new DemoFragment());
//4.提交
tt.commit();
}
}
DemoFragment:
package com.example.dell.myapplication;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
@ContentView(R.layout.fragment_demo)
public class DemoFragment extends Fragment {
@ViewInject(R.id.btn_fragment)
private Button button;
@ViewInject(R.id.tv_text)
private TextView textView;
/**
* 上下文
*/
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context =getContext();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// return super.onCreateView(inflater, container, savedInstanceState);
return x.view().inject(this,inflater,container);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "我是按钮,我在fragment中初始化,并且被点击了", Toast.LENGTH_SHORT).show();
}
});
textView.setText("我在fragment中初始化了");
}
}
XUtils3NetActivity:
package com.example.dell.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import org.xutils.common.Callback;
import org.xutils.common.task.PriorityExecutor;
import org.xutils.http.RequestParams;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
import java.io.File;
@ContentView(R.layout.activity_xutils3_net)
public class XUtils3NetActivity extends Activity {
@ViewInject(R.id.tv_result)
private TextView textView;
@ViewInject(R.id.progressbar)
private ProgressBar progressbar;
@ViewInject(R.id.tv_title)
private TextView title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_xutils3_net);
x.view().inject(this);
title.setText("xUtils3的网络模块");
}
@Event(value = {R.id.btn_get_post,R.id.btn_downloadfile,R.id.btn_uploadfile})
private void getEvent(View view){
switch (view.getId()){
case R.id.btn_get_post:
getAndPostNet();
// Toast.makeText(XUtils3NetActivity.this, "Get和Post请求", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_downloadfile:
downloadFile();
// Toast.makeText(XUtils3NetActivity.this, "文件下载", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_uploadfile:
uploadFile();
// Toast.makeText(XUtils3NetActivity.this, "文件上传", Toast.LENGTH_SHORT).show();
break;
}
}
/**
* 文件上传
*/
private void uploadFile() {
RequestParams params = new RequestParams("http://192.168.1.16:8080/FileUpload/FileUploadServlet");
//以表单方式上传
params.setMultipart(true);
//设置上传文件的路径
params.addBodyParameter("File",new File(Environment.getExternalStorageDirectory()+"/atguigu/480.mp4"),null,"oppo.mp4");
x.http().post(params, new Callback.ProgressCallback<File>() {
/**
* 当下载成功的时候回调这个方法,并且把下载到哪个路径回传过来
* @param file
*/
@Override
public void onSuccess(File file) {
Log.e("TAG", "onSuccess==" + file.toString());
Toast.makeText(XUtils3NetActivity.this, "onSuccess==" + file.toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e("TAG", "onError==" + ex.getMessage());
}
@Override
public void onCancelled(CancelledException cex) {
Log.e("TAG", "onCancelled==" + cex.getMessage());
}
@Override
public void onFinished() {
Log.e("TAG", "onFinished==");
}
@Override
public void onWaiting() {
Log.e("TAG", "onWaiting==");
}
@Override
public void onStarted() {
Log.e("TAG", "onStarted==");
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
progressbar.setMax((int) total);
progressbar.setProgress((int) current);
Log.e("TAG", "onLoading==" + current + "/" + total + ",isDownloading==" + isDownloading);
}
});
}
private void downloadFile() {
RequestParams params = new RequestParams("http://vfx.mtime.cn/Video/2016/09/15/mp4/160915092608935956_480.mp4");
//设置保存数据
params.setSaveFilePath(Environment.getExternalStorageDirectory() + "/atguigu/480.mp4");
//设置是否可以立即取消下载
params.setCancelFast(true);
//设置是否自动根据头信息命名
params.setAutoRename(false);
//设置断点续传
params.setAutoResume(true);
params.setExecutor(new PriorityExecutor(3, true));//自定义线程池,有效的值范围[1, 3], 设置为3时, 可能阻塞图片加载.可以使下载速度快一些,也可以不使用
x.http().get(params, new Callback.ProgressCallback<File>() {
/**
* 当下载成功的时候回调这个方法,并且把下载到哪个路径回传过来
* @param file
*/
@Override
public void onSuccess(File file) {
Log.e("TAG","onSuccess=="+file.toString());
Toast.makeText(XUtils3NetActivity.this, "onSuccess=="+file.toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e("TAG","onError=="+ex.getMessage());
}
@Override
public void onCancelled(CancelledException cex) {
Log.e("TAG","onCancelled=="+cex.getMessage());
}
@Override
public void onFinished() {
Log.e("TAG","onFinished==");
}
@Override
public void onWaiting() {
Log.e("TAG","onWaiting==");
}
@Override
public void onStarted() {
Log.e("TAG","onStarted==");
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
progressbar.setMax((int) total);
progressbar.setProgress((int) current);
Log.e("TAG", "onLoading=="+current+"/"+total+",isDownloading=="+isDownloading);
}
});
}
private void getAndPostNet() {
//1.Get请求
//2.Post请求
RequestParams params = new RequestParams("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.e("TAG", "xUtis3联网请求成功==" + result);
// textView.setText("Get请求的结果——————" + result);
textView.setText("Post请求的结果——————" + result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e("TAG", "xUtis3联网请求失败==" + ex.getMessage());
textView.setText("xUtis3联网请求失败==" + ex.getMessage());
}
@Override
public void onCancelled(CancelledException cex) {
Log.e("TAG", "onCancelled==" + cex.getMessage());
}
@Override
public void onFinished() {
Log.e("TAG","onFinished==");
}
});
}
}