OKGO和Glide框架
一.OKGO
1.依赖
implementation ‘com.lzy.net:okgo:3.0.4’
2.布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="get"
android:id="@+id/get"></Button>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="post"
android:id="@+id/post"></Button>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="download"
android:id="@+id/download"></Button>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="upload"
android:id="@+id/upload"></Button>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载图片"
android:id="@+id/image"></Button>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:id="@+id/progress"></ProgressBar>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:id="@+id/progress2"></ProgressBar>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageview"></ImageView>
</LinearLayout>
3.Activity 中代码
private Button get;
private Button post;
private Button download;
private Button upload;
private ProgressBar bar;
private ProgressBar bar2;
private Button image;
private ImageView imageview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
get = (Button) findViewById(R.id.get);
post = (Button) findViewById(R.id.post);
download = (Button) findViewById(R.id.download);
upload = (Button) findViewById(R.id.upload);
bar = (ProgressBar) findViewById(R.id.progress);
bar2 = (ProgressBar) findViewById(R.id.progress2);
image = (Button) findViewById(R.id.image);
imageview = (ImageView) findViewById(R.id.imageview);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},100);
}
//get请求
get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OkGo.<String>get("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&itemid=2&act=ad_app").execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(MainActivity.this,""+response.body(),Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Response<String> response) {
super.onError(response);
}
});
}
});
//post请求
post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// act=column&ctype=2&mid=16
HashMap<String, String> map = new HashMap<>();
map.put("act","column");
map.put("ctype","2");
map.put("mid","16");
OkGo.<String>post("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&").params(map).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String body = response.body();
Toast.makeText(MainActivity.this,body, Toast.LENGTH_SHORT).show();
}
});
}
});
//下载文件
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OkGo.<File>get("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4").execute(new FileCallback("/sdcard/Movies","aaa.mp4") {
@Override
public void onSuccess(Response<File> response) {
File body = response.body();
}
@Override
public void onStart(Request<File, ? extends Request> request) {
super.onStart(request);
}
@Override
public void downloadProgress(Progress progress) {
super.downloadProgress(progress);
bar.setProgress((int) (progress.fraction*100));
}
@Override
public void onError(Response<File> response) {
super.onError(response);
}
@Override
public void onFinish() {
super.onFinish();
Toast.makeText(MainActivity.this,"下载成功",Toast.LENGTH_SHORT).show();
bar.setVisibility(View.INVISIBLE);
}
});
}
});
//上传文件
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OkGo.<String>post("http://169.254.184.145/%E6%9C%8D%E5%8A%A1%E7%AB%AF/").isMultipart(true).params("file",new File("/sdcard/Music/HIDDN,Beatrich - Find You.mp3"),"shabi.mp3")
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
// Toast.makeText(MainActivity.this,""+response.body(),Toast.LENGTH_SHORT).show();
}
@Override
public void uploadProgress(Progress progress) {
super.uploadProgress(progress);
bar2.setProgress((int) (progress.fraction*100));
}
});
}
});
//下载图片并显示在Imageview
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OkGo.<Bitmap>get("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562587162663&di=58b961a5726901f5d3b97f8924ddc189&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201811%2F10%2F20181110102045_jwqny.jpg").execute(new BitmapCallback() {
@Override
public void onSuccess(Response<Bitmap> response) {
Bitmap body = response.body();
imageview.setImageBitmap(body);
}
});
}
});
}
}
二.okGo简单的json封装
1.定义抽象类
public abstract class JsonCallBack<T> extends AbsCallback<T> {
Class<T>tClass;
public JsonCallBack(Class<T> tClass) {
this.tClass = tClass;
}
@Override
public T convertResponse(Response response) throws Throwable {
if (response.body()==null){
return null;
}
String string = response.body().string();
Gson gson = new Gson();
if (tClass==null){
return null;
}
T t = gson.fromJson(string,tClass);
return t;
}
}
Activity中的实现
此字符串是个数组,需要在类型中添加[ ]
JavaBean为字符串的工具类
public class JsonActivity extends AppCompatActivity {
String get_url="http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&itemid=2&act=ad_app";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
OkGo.<JavaBean[]>get(get_url).execute(new JsonCallBack<JavaBean[]>(JavaBean[].class) {
@Override
public void onSuccess(Response<JavaBean[]> response) {
JavaBean[] beans = response.body();
}
});
}
}
三.Glide框架的使用
1.Bitmap三级缓存机制
Glide.get(GlideActivity.this).clearMemory();//清除内存缓存
new Thread(new Runnable() {
@Override
public void run() {
Glide.get(GlideActivity.this).clearDiskCache();//清除SD卡缓存
}
}).start();
2. 加载本地SD卡图片+网络图片+资源图片+视频+GIF动图
Glide .with(this).load(地址).into(imageView);
3.加载圆形头像
Glide.with(this)
.load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562587162663&di=58b961a5726901f5d3b97f8924ddc189&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201811%2F10%2F20181110102045_jwqny.jpg")
.apply(RequestOptions.bitmapTransform(new CircleCrop()))
.into(imageView);
4.加载圆角头像
Glide.with(this)
.load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562587162663&di=58b961a5726901f5d3b97f8924ddc189&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201811%2F10%2F20181110102045_jwqny.jpg")
.apply(RequestOptions.bitmapTransform(new RoundedCorners(100)))
.into(imageView);
5.设置占位符和加载失败图片
Glide.with(this)
.load("http://hbimg.b0.upaiyun.com/9852feef26dcba3d807282aa5dff561b1e223de85b027-Tzv0x0_fw658")
.apply(RequestOptions.bitmapTransform(new RoundedCorners(20)).error(R.mipmap.error).placeholder(R.drawable.ic_launcher_background))
.into(iv);