Andriod studio 学习 之 OkGo框架

39 篇文章 0 订阅
34 篇文章 0 订阅
OkGo框架

用来处理网络请求的框架 功能:上传,下载

OkGo主要功能

基本的get、post、put、delete、head、options、trace、patch八种请求
支持upString,upJson,upBytes,upFile等up类方法上传特定数据
支持一个key上传一个文件,也可以一个key上传多个文件,也可以多文件和多参数一起上传 大文件下载和下载进度回调 大文件上传和上传进度回调
支持cookie的自动管理,并可自定义cookie管理策略 支持缓存模式,不仅支持http缓存协议,也支持自定义缓存策略 支持重定向
支持自定义超时自动重连次数 支持链式调用 支持https访问,支持双向认证 支持根据tag取消请求,也可全部取消
支持自定义Callback,自动解析网络数据

首先添加依赖:

implementation ‘com.lzy.net:okgo:3.0.4’

案例效果展示

上传的文件展示
在这里插入图片描述
下载的文件展示
在这里插入图片描述
解析的字符串log输出展示
在这里插入图片描述

关于代码的一些问题

实现的功能:get方式下载文件,封装工具类下载json串并解析字符串,post上传MP4;
ps:其中加入了progress测试,还有glide的功能
思路:
1.首先需要封装一个工具类
(1)这个工具类需要定义一个结果接口传值
(2)这个工具类需要实现下载json串和解析的功能
(3)这个工具类非常灵活,调用时可以用任意json串
2.在xml中需要定义按钮实现效果
3.activity中需要实现具体代码

代码

xml布局中的代码

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下载文件"
        />
    <Button
        android:id="@+id/json"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="解析json"
        />
    <Button
        android:id="@+id/mp4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="上传mp4"
        />
    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        />
    <Button
        android:id="@+id/imagecorner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Glide圆形圆角"
        />
    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/bird"
        />

</LinearLayout>

定义的接口

package com.example.day004.Utils;

public interface Getinterface<T> {
    public void success(T o);
}

实现解析的工具类

package com.example.day004.Utils;

import com.google.gson.Gson;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;

public class OkgoUtils {
    public<T> void fromjson(String url, final Class c, final Getinterface getinterface){
        OkGo.<String>get(url).execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                String body = response.body();
                Gson gson = new Gson();
                Object o = gson.fromJson(body, c);
                getinterface.success((T)o);
            }
        });
    }
}

activity中的代码

package com.example.day004;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.example.day004.Utils.Bean;
import com.example.day004.Utils.Getinterface;
import com.example.day004.Utils.Imageutils;
import com.example.day004.Utils.OkgoUtils;
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 java.io.File;

public class MainActivity extends AppCompatActivity {
    private Button image;
    private Button json;
    private Button mp4;
    private ProgressBar progressbar;
    private Button imagecorner;
    private ImageView imageview;

    private String url="http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=10&page=1";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        image = (Button) findViewById(R.id.image);
        json = (Button) findViewById(R.id.json);
        mp4 = (Button) findViewById(R.id.mp4);
        progressbar = (ProgressBar) findViewById(R.id.progress);
        imagecorner = (Button) findViewById(R.id.imagecorner);
        imageview = (ImageView) findViewById(R.id.imageview);


        //下载文件
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        String url="http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";
                        OkGo.<File>get(url).execute(new FileCallback(Environment.getExternalStorageDirectory().getPath(),"abc.MP4") {
                            @Override
                            public void onSuccess(Response<File> response) {
                                File body = response.body();
                            }
                            //上传的进度
                            @Override
                            public void downloadProgress(Progress progress) {
                                super.downloadProgress(progress);
                                //如何拿到当前的进度
                                progressbar.setProgress((int) (progress.fraction*100));
                            }
                        });
                    }
                }.start();
            }
        });

        //解析字符串
        json.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){
                    @Override
                    public void run() {
                        super.run();

                        OkGo.<String>get(url).execute(new StringCallback() {
                            @Override
                            public void onSuccess(Response<String> response) {
                                OkgoUtils okgoUtils = new OkgoUtils();
                                okgoUtils.fromjson(url, Bean.class, new Getinterface<Bean>() {
                                    @Override
                                    public void success(Bean o) {
                                        String json = o.toString();
                                        Toast.makeText(MainActivity.this, json, Toast.LENGTH_SHORT).show();
                                    }
                                });
                            }
                        });
                    }
                }.start();
            }
        });

        //上传mp3
        mp4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        OkGo.<String>post("http://169.254.152.180/test/").isMultipart(true).params("file",new File("/mnt/sdcard/hhh.mp3"),"aaa.MP3").execute(new StringCallback() {
                            @Override
                            public void onSuccess(Response<String> response) {
                                Log.d( "结果: ",response.body());
                            }

                            @Override
                            public void uploadProgress(Progress progress) {
                                super.uploadProgress(progress);
//                        progress.fraction*100;
                            }
                        });
                    }
                }.start();
            }
        });

        imagecorner.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Imageutils imageutils = new Imageutils();
                imageutils.loadimage(MainActivity.this,"http://img.redocn.com/sheying/20140731/qinghaihuyuanjing_2820969.jpg",imageview);
            }
        });
    }
}

测试用的bean类

package com.example.day004.Utils;

import java.util.List;

public class Bean {

    /**
     * ret : 1
     * data : [{"id":"8289","title":"油焖大虾","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg","collect_num":"1668","food_str":"大虾 葱 生姜 植物油 料酒","num":1668},{"id":"2127","title":"四川回锅肉","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2127.jpg","collect_num":"1590","food_str":"猪肉 青蒜 青椒 红椒 姜片","num":1590},{"id":"30630","title":"超简单芒果布丁","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/31/30630.jpg","collect_num":"1540","food_str":"QQ糖 牛奶 芒果","num":1540},{"id":"9073","title":"家常红烧鱼","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/10/9073.jpg","collect_num":"1425","food_str":"鲜鱼 姜 葱 蒜 花椒","num":1425},{"id":"10097","title":"家常煎豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10097.jpg","collect_num":"1417","food_str":"豆腐 新鲜红椒 青椒 葱花 油","num":1417},{"id":"10509","title":"水煮肉片","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10509.jpg","collect_num":"1340","food_str":"瘦猪肉 生菜 豆瓣酱 干辣椒 花椒","num":1340},{"id":"46968","title":"红糖苹果银耳汤","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/47/46968.jpg","collect_num":"1252","food_str":"银耳 苹果 红糖","num":1252},{"id":"10191","title":"麻婆豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10191.jpg","collect_num":"1220","food_str":"豆腐 肉末 生抽 白糖 芝麻油","num":1220},{"id":"2372","title":"皮蛋瘦肉粥","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2372.jpg","collect_num":"1151","food_str":"大米 皮蛋 猪肉 油条 香葱","num":1151},{"id":"2166","title":"蚂蚁上树","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2166.jpg","collect_num":"1144","food_str":"红薯粉 肉 姜 蒜 花椒","num":1144}]
     */

    private int ret;
    private List<DataBean> data;

    public int getRet() {
        return ret;
    }

    public void setRet(int ret) {
        this.ret = ret;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * id : 8289
         * title : 油焖大虾
         * pic : http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg
         * collect_num : 1668
         * food_str : 大虾 葱 生姜 植物油 料酒
         * num : 1668
         */

        private String id;
        private String title;
        private String pic;
        private String collect_num;
        private String food_str;
        private int num;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getPic() {
            return pic;
        }

        public void setPic(String pic) {
            this.pic = pic;
        }

        public String getCollect_num() {
            return collect_num;
        }

        public void setCollect_num(String collect_num) {
            this.collect_num = collect_num;
        }

        public String getFood_str() {
            return food_str;
        }

        public void setFood_str(String food_str) {
            this.food_str = food_str;
        }

        public int getNum() {
            return num;
        }

        public void setNum(int num) {
            this.num = num;
        }
    }
}

额外的图片工具类

package com.example.day004.Utils;

import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.example.day004.R;

/**
 * Glide是图片的下载框架
 */
public class Imageutils {
    public void loadimage(Context context, String url, ImageView imageView){
        RequestOptions options = new RequestOptions();
        options.error(R.mipmap.ic_launcher);//错误的时候显示的一张图
        options.placeholder(R.mipmap.ic_launcher);//占位图
        options.circleCrop();//圆形图
//        RoundedCorners roundedCorners = new RoundedCorners(20);
//        options.transform(roundedCorners);//圆角
        Glide.with(context).load(url).apply(options).into(imageView);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值