OkGo&Glide

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

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值