OkGo
未封装
package com.example.day1105;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Progress;
import com.lzy.okgo.model.Response;
import com.lzy.okgo.request.base.Request;
import java.io.File;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button_get;
private Button button_post;
private ProgressBar progressBar_id;
private Button button_download;
private Button button_upload;
private String url_get = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
private String url_post = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1";
private String url_download = "http://169.254.195.241/Hfs/tooth.jpg";
private String url_upload = "http://169.254.195.241/Hfs/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},102);
}else {
initView();
}
}
private void initView() {
button_get = findViewById(R.id.button_get);
button_post = findViewById(R.id.button_post);
button_download = (Button) findViewById(R.id.button_download);
button_upload = (Button) findViewById(R.id.button_upload);
progressBar_id = findViewById(R.id.progressBar_id);
button_upload.setOnClickListener(this);
button_download.setOnClickListener(this);
button_get.setOnClickListener(this);
button_post.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_get:
doGet();
break;
case R.id.button_post:
doPost();
break;
case R.id.button_download:
doDownload();
break;
case R.id.button_upload:
doUpload();
break;
}
}
public void doGet() {
OkGo.<String>get(url_get).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);
Toast.makeText(MainActivity.this, response.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public void doPost() {
HashMap<String, String> map = new HashMap<>();
map.put("limit", "20");
map.put("page", "1");
OkGo.<String>post(url_post).params(map).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);
Toast.makeText(MainActivity.this, response.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public void doDownload() {
OkGo.<File>get(url_download).execute(new FileCallback("/storage/emulated/0", "oll.jpg") {
@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);
progressBar_id.setProgress((int) (progress.fraction * 100));
}
@Override
public void onFinish() {
super.onFinish();
Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_SHORT).show();
}
});
}
public void doUpload() {
OkGo.<String>post(url_upload).isMultipart(true).params("file", new File("/storage/emulated/0/dy5.mp4")).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
}
@Override
public void uploadProgress(Progress progress) {
super.uploadProgress(progress);
progressBar_id.setProgress((int) (progress.fraction * 100));
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 102 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
initView();
}else {
fileList();
}
}
}
二次封装
Callback
package com.example.app2.callback;
import com.google.gson.Gson;
import com.lzy.okgo.callback.AbsCallback;
import okhttp3.Response;
import okhttp3.ResponseBody;
public abstract class JsonCAllback<T> extends AbsCallback<T> {
private Class<T> tClass;
public JsonCAllback(Class<T> tClass) {
this.tClass = tClass;
}
@Override
public T convertResponse(Response response) throws Throwable {
ResponseBody body = response.body();
if (body == null){
return null;
}
String string = body.string();
T t = new Gson().fromJson(string, tClass);
if (t == null){
return null;
}
return t;
}
}
activity
package com.example.app2;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.app2.bean.DouBean;
import com.example.app2.bean.JianBean;
import com.example.app2.bean.XIaBean;
import com.example.app2.callback.JsonCAllback;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.model.Response;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button_xia;
private Button button_dou;
private Button button_jia;
private String xia_url="http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
private String dou_url="https://www.apiopen.top/satinApi?type=1&page=2";
private String banner_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_main);
initView();
}
private void initView() {
button_xia = (Button) findViewById(R.id.button_xia);
button_dou = (Button) findViewById(R.id.button_dou);
button_jia = (Button) findViewById(R.id.button_jia);
button_xia.setOnClickListener(this);
button_dou.setOnClickListener(this);
button_jia.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_xia:
OkGo.<XIaBean>get(xia_url).execute(new JsonCAllback<XIaBean>(XIaBean.class) {
@Override
public void onSuccess(Response<XIaBean> response) {
Toast.makeText(MainActivity.this, response.body().toString(), Toast.LENGTH_SHORT).show();
}
});
break;
case R.id.button_dou:
OkGo.<DouBean>get(dou_url).execute(new JsonCAllback<DouBean>(DouBean.class) {
@Override
public void onSuccess(Response<DouBean> response) {
Toast.makeText(MainActivity.this, response.body().toString(), Toast.LENGTH_SHORT).show();
}
});
break;
case R.id.button_jia:
OkGo.<JianBean[]>get(banner_url).execute(new JsonCAllback<JianBean[]>(JianBean[].class) {
@Override
public void onSuccess(Response<JianBean[]> response) {
Toast.makeText(MainActivity.this, response.body().toString(), Toast.LENGTH_SHORT).show();
}
});
break;
}
}
}
Glide
依赖
implementation 'com.github.bumptech.glide:glide:4.1.1'//glide依赖
package com.example.app2;
import android.Manifest;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
private Button bt1;
private Button bt2;
private Button bt3;
private Button bt4;
private Button bt5;
private Button bt6;
private Button bt7;
private ImageView iv;
private String image_url = "http://wimg.spriteapp.cn/picture/2019/1103/5dbe69f6db6eb_wpd.jpg";
private String video_url = "http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";
private String image_path = "/storage/emulated/0/jin1.PNG";
private String video_path = "/storage/emulated/0/dy3.mp4";
private String gif_url = "http://i.kinja-img.com/gawker-media/image/upload/s--B7tUiM5l--/gf2r69yorbdesguga10i.gif";
private Button button_clear;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
}
initView();
}
private void initView() {
bt1 = (Button) findViewById(R.id.bt1);
bt2 = (Button) findViewById(R.id.bt2);
bt3 = (Button) findViewById(R.id.bt3);
bt4 = (Button) findViewById(R.id.bt4);
bt5 = (Button) findViewById(R.id.bt5);
bt6 = (Button) findViewById(R.id.bt6);
bt7 = (Button) findViewById(R.id.bt7);
iv = (ImageView) findViewById(R.id.iv);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
bt3.setOnClickListener(this);
bt4.setOnClickListener(this);
bt5.setOnClickListener(this);
bt6.setOnClickListener(this);
bt7.setOnClickListener(this);
button_clear = (Button) findViewById(R.id.button_clear);
button_clear.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt1://加载本地图片
Glide.with(this).load(image_path).into(iv);
break;
case R.id.bt2://加载本地视频
Glide.with(this).load(video_path).into(iv);
break;
case R.id.bt3://加载网络图片
Glide.with(this).load(image_url).into(iv);
break;
case R.id.bt4://加载网络视图
Glide.with(this).load(video_url).into(iv);
break;
case R.id.bt5://加载gif
Glide.with(this).load(gif_url).into(iv);
break;
case R.id.bt6://加载圆tu
Glide.with(this).load(image_url).apply(new RequestOptions().bitmapTransform(new CircleCrop())).into(iv);
break;
case R.id.bt7://加载圆角图
Glide.with(this).load(image_url).apply(new RequestOptions().bitmapTransform(new RoundedCorners(50))).into(iv);
break;
case R.id.button_clear://清楚缓存
Glide.get(this).clearMemory();
new Thread(new Runnable() {
@Override
public void run() {
Glide.get(Main2Activity.this).clearDiskCache();
}
}).start();
break;
}
}
}
案例
1
①网络请求数据展现在listview中,图片要求圆角并设置占位符和加载错误图片
②点击图片弹出对话框是否下载图片到SD卡中,若不存在直接下载
③长按图片,将图片上传到服务器中
package com.example.app3.fragment;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import com.example.app3.R;
import com.example.app3.adapter.MyAdapter;
import com.example.app3.bean.FoodBean;
import com.example.app3.bean.MyCallBack;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Progress;
import com.lzy.okgo.model.Response;
import com.lzy.okgo.request.base.Request;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class FirstFragment extends Fragment {
private ListView listView_id;
private String url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
private List<FoodBean.DataBean> list_food = new ArrayList<>();
private MyAdapter adapter;
public FirstFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_first, container, false);
OkGo.<FoodBean>get(url).execute(new MyCallBack<FoodBean>(FoodBean.class) {
@Override
public void onSuccess(Response<FoodBean> response) {
FoodBean body = response.body();
List<FoodBean.DataBean> data = body.getData();
list_food.addAll(data);
adapter.notifyDataSetChanged();
}
});
listView_id = inflate.findViewById(R.id.listView_id);
adapter = new MyAdapter(getContext(),list_food);
listView_id.setAdapter(adapter);
listView_id.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
File file = new File("/storage/emulated/0/DCIM", "zrx" + position + ".jpg");
if (file.exists()){
Toast.makeText(getContext(), "该图片已存在", Toast.LENGTH_SHORT).show();
}else {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setMessage("您确定要下载这张图片吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
OkGo.<File>get(list_food.get(position).getPic()).execute(new FileCallback("/storage/emulated/0/DCIM","zrx"+position+".jpg") {
@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);
}
@Override
public void onFinish() {
super.onFinish();
Toast.makeText(getContext(), "下载完成", Toast.LENGTH_SHORT).show();
}
});
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
}
});
listView_id.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
OkGo.<String>post("http://169.254.195.241/Hfs/").params("file", new File("/storage/emulated/0/zrx"+position+".jpg")).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(getContext(), "上传成功", Toast.LENGTH_SHORT).show();
}
});
return true;
}
});
return inflate;
}
}
2
(4) fragment2:使用banner完成轮播图
http://musicapi.leanapp.cn/banner
package com.example.app3.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import com.example.app3.R;
import com.example.app3.bean.MyLoader;
import com.youth.banner.Banner;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class SecondFragment extends Fragment {
private Banner banner_id;
private List<String> list_image = new ArrayList<>();
public SecondFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_second, container, false);
banner_id = inflate.findViewById(R.id.banner_id);
list_image.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1571309373701&di=7473b189d2323168d2f78ad853409e61&imgtype=0&src=http%3A%2F%2Fwww.ign.xn--fiqs8s%2Fsm%2Fign_cn%2Fscreenshot%2Fdefault%2Fcyberpunk2077-doing-business-rgb-1528839124418_pm4y.jpg");
list_image.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1571309373720&di=a22a1435e9851865df19d719e272308d&imgtype=0&src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farchive%2F856075c9603a87db5860130c9457dc2410770f57.jpg");
MyLoader myLoader = new MyLoader();
banner_id.setImages(list_image);
banner_id.setImageLoader(myLoader);
banner_id.startAutoPlay();
banner_id.start();
return inflate;
}
}
3
(5)fragment3:(自己模拟二级缓存,不使用Glide加载图片)
①http://p1.music.126.net/yC_df5u0myXVp-bM99K3Lw==/5870292580832850.jpg
②添加一个ImageView控件,
③先判断磁盘中有没有这张图片,如果有,将磁盘上的照片显示在ImageView上
④如果磁盘没有这张照片,网络请求照片展现在ImageView上,并将网络请求的照片存储在磁盘中,下次就不需要网络请求,直接获取磁盘的照片
package com.example.app3.fragment;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.fragment.app.Fragment;
import com.example.app3.R;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.BitmapCallback;
import com.lzy.okgo.model.Response;
import java.io.File;
/**
* A simple {@link Fragment} subclass.
*/
public class ThirdFragment extends Fragment {
private ImageView imageView_id;
private String url = "http://p1.music.126.net/yC_df5u0myXVp-bM99K3Lw==/5870292580832850.jpg";
public ThirdFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_third, container, false);
imageView_id = inflate.findViewById(R.id.imageView_id);
File file = new File("/storage/emulated/0/DCIM", "zrx.jpg");
if (file.exists()){
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
imageView_id.setImageBitmap(bitmap);
}else {
OkGo.<Bitmap>get(url).execute(new BitmapCallback() {
@Override
public void onSuccess(Response<Bitmap> response) {
Bitmap body = response.body();
imageView_id.setImageBitmap(body);
}
});
}
return inflate;
}
}