Okhttp的封装和回调

public class HttpUtil {
    static HttpUtil util;
    private final OkHttpClient client;

//  私有化构造方法
    private HttpUtil(){
        client = new OkHttpClient();
    }

    public static HttpUtil getInstance(){
        if(util == null){
            synchronized (HttpUtil.class){
                util = new HttpUtil();
            }
        }

        return util;
    }

public void httRequest(String url,final HttpRespon respon) {

        Request request = new Request.Builder()
                .url(url)
                .build();

        client.newCall(request).enqueue(new Callback() {

            //              请求失败
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
                respon.onError("请求网络失败");
            }

            //              有响应
            @Override
            public void onResponse(Call call, Response response) throws IOException {

                if (!response.isSuccessful()) {
                    respon.onError("请求网络失败");
                }

//                  获取响应body
                    String json = response.body().string();
//                  解析Json
                    respon.parse(json);

            }
        });
    }

}

定义的回调接口:

public abstract class HttpRespon<T> {
    //http返回的类型的泛型
    Class<T> t;

    public HttpRespon(Class<T> t){
        this.t = t;
    }

//  请求失败时,回调的方法
    public abstract void onError(String msg);
//  请求成功时,回调的方法
    public abstract void onSuccess(T t);

    public void parse(String json){
        if(TextUtils.isEmpty(json)){
            //请求失败
            onError("连接网络失败");
            return;
        }
        if(t == String.class){
            onSuccess((T) json);
            return;
        }

        T result = JsonUtil.parse(json, this.t);
        if(result == null){
            onError("Json解析失败");
        }else{
            onSuccess(result);
        }
    }
}

调用的事例:

            HttpUtil.getInstance().httRequest(Constant.SPLASH_URL, new HttpRespon<Ad>(Ad.class) {
                @Override
                public void onError(String msg) {
                    Log.i("fjl", msg);
                }

                @Override
                public void onSuccess(Ad ad) {
                    Intent intent = new Intent();
                    intent.setClass(AdsActivity.this, AdDownloadService.class);
                    intent.putExtra(AdDownloadService.AD_DATA, ad);
                    startService(intent);
                }
            });

原文地址:https://www.cnblogs.com/kliver123/p/8761846.html

时间: 2024-12-26 22:39:02

Okhttp的封装和回调的相关文章

android 开发 - 使用okhttp框架封装的开发框架

概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 oknet是一套基于okhttp的android网络http框架,封装了请求参数处理,日志打印. Github地址 https://github.com/vir56k/oknet 特性 1.简洁的语法 2.支持自定义处理 message code 不等于0 的情形 3.支持文件上传 4.完整清晰的l

安卓OKhttp请求封装

目前安卓开发中使用的网络工具为OKhttp,但是okhttp的使用还不是很方便,在okhttp的基础上再对请求进行封装会极大的方便网络调用. 下面直接上代码. 请求封装 public class HttpUtil { public static void sendOKHttpRequest(String address, Map<String,String> head,Map<String,String> body,okhttp3.Callback callback){ OkHtt

OKhttp的封装(下)

OKhttpManager2.Class  请求工具类 1 package com.example.administrator.okhttp3; 2 3 import android.os.Handler; 4 import android.os.Looper; 5 6 import java.io.IOException; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 import okhttp3.Call; 11 impor

OKhttp的封装(上)

自从介绍了OKhttp3的一些基本使用之后,又偷了下懒,所以它的续篇被搁置了一段时间,现在补充. OKhttpManager.Class  请求工具类 1 package com.example.administrator.okhttp3; 2 3 import android.os.Handler; 4 import android.os.Looper; 5 6 import java.io.IOException; 7 import java.util.HashMap; 8 import j

Rxjava+ReTrofit+okHttp深入浅出-终极封装四(多文件下载之断点续传)

Rxjava+ReTrofit+okHttp深入浅出-终极封装四(多文件下载之断点续传) 背景 断点续传下载一直是移动开发中必不可少的一项重要的技术,同样的Rxjava和Retrofit的结合让这个技术解决起来更加的灵活,我们完全可以封装一个适合自的下载框架,简单而且安全! 效果 实现 下载和之前的http请求可以相互独立,所以我们单独给download建立一个工程moudel处理 1.创建service接口 和以前一样,先写接口 注意:Streaming是判断是否写入内存的标示,如果小文件可以

OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的分析,探索OkHttp这个框架的使用和封装 一.追其原理 Android系统提供了两种HTTP通信类 HttpURLConnection HttpClient Google推荐使用HttpURLConnection,这个没必要多说,事实上,我这篇写的应该算是比较晚了,很多优秀的博文都已经提出了这些观

[Android]OkHttp的简单封装-辅助框架

序言 OkHttp 的强大算是毋庸置疑了:OkHttp 基本在网络层能完成任何事情,适用任何情况:正因为如此 OkHttp 每次构建一个请求的时候不得不写大量的代码来完成相应的配置.在这里分享一个极限封装OkHttp的辅助框架,通过该框架能最大程度简化你的开发负担.好话不多说,往下看看就知道好不好. 原生 在这里举例几个原生情况下使用 okhttp 的情况. GET public void get() { Request.Builder builder = new Request.Builder

Android -- OkHttp的简单使用和封装

1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天就来自我救赎一把,就和大家写写从最基础的OKHttp的简单get.post的使用,再到它的封装. 2,OkHttp的简单使用 首先我们创建一个工程,并在布局文件中添加三个控件,TextView(用于展示获取到json后的信息).Button(点击开始请求网络).ProgressBar(网络加载提示框) ①简单的异步Get请求 第一步,创建OKHttpClient对象 第二

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V