Glide工具类/OkGo网络请求/MVP请求数据/Retrofit+RxJava/ARouter/补间动画/轮播图等等等等等 记录一下~~

Posted 怪歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Glide工具类/OkGo网络请求/MVP请求数据/Retrofit+RxJava/ARouter/补间动画/轮播图等等等等等 记录一下~~相关的知识,希望对你有一定的参考价值。

PhaseTwo(android

okgo

okhttp的封装 简易版Okhttp
这里继承了上一个项目中的BaseActivity,如果不明白的点下面的链接,并打开PhaseTwo(Android)
上一期的Java-Android.

package com.bawei.zhuangao2.day3;


import android.Manifest;
import android.annotation.SuppressLint;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView;

import com.bawei.zhuangao2.R;
import com.bawei.zhuangao2.day1.HeadInterceptor;
import com.bawei.zhuangao2.day2.base.BaseActivity;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
//一样继承于BaseActivity
public class OkGoActivity extends BaseActivity 
    //用于下载图片展示
    private ImageView coverIv;

    /**
     * 绑定主要视图
     * @return
     */
    @Override
    public int bandLayout() 
        return R.layout.activity_okhttp;
    

    /**
     * 初始化控件 并设置点击事件
     */
    @Override
    public void initView() 
        //获取隐私权限(这里隐私权限指的是:手机联系人,读写SD卡,手机信息等等)
        //这里获取了写入SD卡的权限
        PermissionUtils.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE).request();

        findViewById(R.id.btn1).setOnClickListener(this);
        findViewById(R.id.btn2).setOnClickListener(this);
        findViewById(R.id.btn3).setOnClickListener(this);
        findViewById(R.id.btn4).setOnClickListener(this);
        findViewById(R.id.btn5).setOnClickListener(this);
        findViewById(R.id.btn6).setOnClickListener(this);
        coverIv = findViewById(R.id.image);
    


    @Override
    public void initData() 

    

    /**
     * 点击事件
     * @param v
     */
    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View v) 
        switch (v.getId()) 
            case R.id.btn1:
                //Get方式获取
                OkGo.<String>get("https://gank.io/api/v2/banners").execute(new StringCallback() 
                    @Override
                    public void onSuccess(Response<String> response) 
                        //对Response 做了解析
                        //这里还是异步线程
                        LogUtils.d(response.body());
                    
                    @Override
                    public void onCacheSuccess(Response<String> response) 
                        super.onCacheSuccess(response);
                        LogUtils.d("onCacheSuccess" + response.body());
                    
                );

                break;
            case R.id.btn2:
                //Post Json 通过upJson("")提交代码
                JSONObject jsonObject = new JSONObject();
                try 
                    jsonObject.put("username", "1234567");
                    jsonObject.put("pwd", "123456");
                    jsonObject.put("sex", "1");
                    jsonObject.put("birthday", "2000-9-9");
                 catch (JSONException e) 
                    e.printStackTrace();
                
                OkGo.<String>post("http://39.98.153.96:8082/api/WeekTest/register")
                        .upJson(jsonObject.toString()).execute(new StringCallback() 
                    @Override
                    public void onSuccess(Response<String> response) 
                        //Response 对做了解析
                        //这里还是异步线程
                        LogUtils.d(response.body());
                    
                );
                break;
            case R.id.btn3:
                //Post From
                //username=1903001&pwd=123456
                OkGo.<String>post("http://39.98.153.96:8082/api/WeekTest/login?username=1903001&pwd=123456")
                        .params("username", "1903001")
                        .params("pwd", "123456")
                        .execute(new StringCallback() 
                            @Override
                            public void onSuccess(Response<String> response) 
                                //Response 对做了解析
                                //这里还是异步线程
                                LogUtils.d(response.body());
                            
                        );
                break;
            case R.id.btn4:
                //下载
                OkGo.<File>get("https://pic.downk.cc/item/5e7b64fd504f4bcb040fae8f.jpg").execute(new FileCallback() 
                    @Override
                    public void onSuccess(final Response<File> response) 
                        runOnUiThread(new Runnable() 
                            @Override
                            public void run() 
                                LogUtils.d(response.body().getPath());
                                coverIv.setImageBitmap(BitmapFactory.decodeFile(response.body().getPath()));
                            
                        );
                    
                );
                break;
            case R.id.btn5:

                break;
            case R.id.btn6:
                //文件上传
                File file = new File("/storage/emulated/0/download/1382400000b859e1c2339");
                coverIv.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));
                OkGo.<String>post("http://117.51.155.210/hfs/")
                        //发送格式为file
                        .params("file",file)
                        //分段发送
                        .isMultipart(true)
                        .execute(new StringCallback() 
                            @Override
                            public void onSuccess(Response<String> response) 
                                LogUtils.d(response.body());
                            
                        );
                break;
        
    



Glide工具

认识Glide
Glide是一个图片加载框架,功能强大,一般用于一些视图显示图片,从url中加载图片等等,也可以进行裁剪图片,达到视觉美观

Glide方法类

/**
 * 单例 双重校验 双重锁
 */
public class ImageManger 

    public void showImage(String url, ImageView view)
        Glide.with(Utils.getApp()).load(url)
                //关闭缓存
                .skipMemoryCache(true)
                //关闭磁盘缓存
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                //加载过程显示
                .placeholder(R.mipmap.ic_launcher)
                //加载失败显示
                .error(R.mipmap.ic_launcher)
                .into(view);
    

    public void showR(String url, ImageView view,int radius)
        Glide.with(Utils.getApp()).load(url)
                .transform(new RoundedCorners(radius))
                //加载过程显示
                .placeholder(R.mipmap.ic_launcher)
                //加载失败显示
                .error(R.mipmap.ic_launcher)
                .into(view);
    

    public void showC(String url, ImageView view)
        Glide.with(Utils.getApp()).load(url)
                //圆形
                .circleCrop()
                .into(view);
    

    //多线程可见
    private static volatile ImageManger imageManger;

    //饿汉式单例
    public static ImageManger getInstance()
        if (imageManger==null)
            //这里上锁
            synchronized (ImageManger.class)
                if (imageManger==null)
                    imageManger=new ImageManger();
                
            
        
        return imageManger;
    

Activity类


public class GlideActivity extends BaseActivity 
    private android.widget.ImageView actGlideIv01;
    private android.widget.ImageView actGlideIv02;
    private android.widget.ImageView actGlideIv03;

    //初始化主视图
    @Override
    public int bandLayout() 
        return R.layout.activity_glide;
    

    //初始化控件
    @Override
    public void initView() 

        actGlideIv01 = findViewById(R.id.act_glide_iv_01);
        actGlideIv02 = findViewById(R.id.act_glide_iv_02);
        actGlideIv03 = findViewById(R.id.act_glide_iv_03);
    

    //加载数据(显示图片)
    @Override
    public void initData() 
        //实例化调用方法 完成Glide加载
        ImageManger imageManger = new ImageManger();
        imageManger.showImage("https://pic.downk.cc/item/5e7b64fd504f4bcb040fae8f.jpg",actGlideIv01);
        imageManger.showC("https://pic.downk.cc/item/5e7b64fd504f4bcb040fae8f.jpg",actGlideIv02);
        imageManger.showR("https://pic.downk.cc/item/5e7b64fd504f4bcb040fae8f.jpg",actGlideIv03,50);

    


MVP

在MVC中,View层是可直接调用Model层的,当发生一些特殊的情况时,无法及时更换网络请求
而MVP中则可以,MVP的主要目的是解耦,P层用于调用M层,V层则用来访问P层

内容较多:可以参考Github网站 > MVP整合框架

MVP分为:

(数据访问层)
Model层: 用于进行数据请求,一般用P层调用其中方法

(连接层)
Presenter层: 中文翻译为"主持人",一般用于连接M层和V层, V层调用P层, P层再调用M层

(视图层)
View层:用于视图展示, 继承回调接口等 调用P层中方法获取数据

目录

Base_lib

一个library组件 其中的抽象类用于被继承, 用于自定义 更加的方便写MVP

基础model层

(接口)

public
interface IModel 
    void destroy();

(抽象实现类)

//销毁方法
public abstract
class BaseModel implements IModel 
    @Override
    public void destroy() 

    

基础View层

(IActivity 基础activity接口)

public
interface IActivity 
    //用于初始化视图
    void initView();
    //用于加载数据
    void initData();

    //用于绑定视图时使用(获取视图)
    int bindLayout();

(IView 基础view层接口)

public
interface IView 
    //用于显示进度条
    void showLoading();
    //用于隐藏进度条
    void hideLoading();

    //用于便捷Toast信息
    void showToast(String msg);

(BaseActivity 基础activity抽象实现类)

/**
 * 和正常Activity一样继承AppCompatActivity 需要实现activity的接口 和 视图层的接口
 */
public abstract
class BaseActivity extends AppCompatActivity implements IActivity,IView 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(bindLayout());   //这里调用获取视图方法 用于设置主视图

        //初始化视图
        initView();
        //初始化数据
        initData();
    

    /**
     * Toast信息
     * @param msg 需要Toast的信息
     */
    @Override
    public void showToast(String msg) 
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    

(IFragment 基础fragment接口)

public
interface IFragment extends IActivity 
    //方便Fragment 初始化组件
    <T extends View> T findViewById(@IdRes int id);

(BaseFragment 基础fragment抽象实现类)


public abstract
class BaseFragment extends Fragment implements IView,IFragment 

    private View view;

    /**
     * 创建视图时调用
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
        //这里绑定主视图
        view = inflater.inflate(bindLayout(),container,false);
        //返回主视图
        return view;
    

    /**
     * 创建视图后调用
     * @param view
     * @param savedInstanceState
     */
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);
        //初始化视图
        initView();

        //初始化数据
        initData();
    

    /**
     * 实现findViewById方法
     * @param id
     * @param <T>
     * @return
     */
    @Override
    public 以上是关于Glide工具类/OkGo网络请求/MVP请求数据/Retrofit+RxJava/ARouter/补间动画/轮播图等等等等等 记录一下~~的主要内容,如果未能解决你的问题,请参考以下文章

Glide工具类/OkGo网络请求/MVP请求数据/Retrofit+RxJava/ARouter/补间动画/轮播图等等等等等 记录一下~~

android -------- OkGo (让网络请求更简单的框架)

Glide 图片请求库(工具类)

OkGO一个专注于让网络请求更简单的框架

使用RxJava+Retrofit+MVP+Glide开发一个简单的新闻客户端

MVP结构基础框架分享