1.BaseApis接口封装请求方式

package com.example.wdshop.network;

import java.util.Map;

import okhttp3.ResponseBody;

import retrofit2.http.GET;

import retrofit2.http.Multipart;

import retrofit2.http.POST;

import retrofit2.http.PUT;

import retrofit2.http.PartMap;

import retrofit2.http.QueryMap;

import retrofit2.http.Url;

import rx.Observable;

public interface BaseApis {

/**

* Observable被观察者

* */

@GET

Observable get(@Url String url);

@POST

Observable post(@Url String url, @QueryMap Map map);

@Multipart

@POST

Observable postFormBody(@Url String url, @PartMap Map requestBodyMap);

}

2.RetrofitManager工具类

package com.example.wdshop.network;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.TimeUnit;

import okhttp3.MediaType;

import okhttp3.OkHttpClient;

import okhttp3.RequestBody;

import okhttp3.ResponseBody;

import okhttp3.logging.HttpLoggingInterceptor;

import retrofit2.Retrofit;

import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;

import rx.Observer;

import rx.android.schedulers.AndroidSchedulers;

import rx.schedulers.Schedulers;

public class RetrofitManager {

private final String BASE_URL = "http://172.17.8.100/small/";

private static RetrofitManager instance;

private final BaseApis baseApis;

//单例

public static RetrofitManager getInstance() {

if (instance == null) {

synchronized (RetrofitManager.class) {

instance = new RetrofitManager();

}

}

return instance;

}

//无参构造

public RetrofitManager() {

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();

interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient.Builder builder = new OkHttpClient.Builder();

builder.readTimeout(10, TimeUnit.SECONDS);

builder.writeTimeout(10, TimeUnit.SECONDS);

builder.connectTimeout(10, TimeUnit.SECONDS);

builder.addInterceptor(interceptor);

builder.retryOnConnectionFailure(true);

OkHttpClient build = builder.build();

Retrofit retrofit = new Retrofit.Builder()

.addCallAdapterFactory(RxJavaCallAdapterFactory.create())

.baseUrl(BASE_URL)

.client(build)

.build();

baseApis = retrofit.create(BaseApis.class);

}

/**

* 可以这样生成Map requestBodyMap

* Map requestDataMap这里面放置上传数据的键值对。

*/

public Map generateRequestBody(Map requesrDataMap) {

Map requestBodyMap = new HashMap<>();

for (String key : requesrDataMap.keySet()) {

RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),

requesrDataMap.get(key) == null ? "" : requesrDataMap.get(key));

requestBodyMap.put(key, requestBody);

}

return requestBodyMap;

}

/**

* get

*/

public RetrofitManager get(String url,HttpListener listener) {

baseApis.get(url)

//后台执行在哪个线程

.subscribeOn(Schedulers.io())

//最终完成后执行在哪个线程

.observeOn(AndroidSchedulers.mainThread())

//设置rxjava

.subscribe(getObserver(listener));

return instance;

}

/**

* 观察者

*/

private Observer getObserver(final HttpListener listener) {

Observer observer = new Observer() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

if (listener != null) {

listener.onFail(e.getMessage());

}

}

@Override

public void onNext(ResponseBody responseBody) {

try {

String data = responseBody.string();

if (null != listener) {

listener.onSuccess(data);

}

} catch (IOException e) {

e.printStackTrace();

if (listener != null) {

listener.onFail(e.getMessage());

}

}

}

};

return observer;

}

/**

* 表单post请求

*/

public RetrofitManager postFormBody(String url, Map map,HttpListener listener) {

if (map == null) {

map = new HashMap<>();

}

baseApis.postFormBody(url,map)

//后台执行在哪个线程

.subscribeOn(Schedulers.io())

//最终完成后执行在哪个线程

.observeOn(AndroidSchedulers.mainThread())

//设置rxjava

.subscribe(getObserver(listener));

return instance;

}

/**

* 普通post

* */

public RetrofitManager post(String url,Map map,HttpListener listener){

if(map == null){

map = new HashMap<>();

}

baseApis.post(url,map)

// 后台执行在哪个线程

.subscribeOn(Schedulers.io())

//最终完成后执行在哪个线程

.observeOn(AndroidSchedulers.mainThread())

//设置rxjava

.subscribe(getObserver(listener));

return instance;

}

//创建观察者

public interface HttpListener {

void onSuccess(String data);

void onFail(String error);

}

}

3.view层接口

package com.example.wdshop.view;

public interface Iview {

void requestData(E e);

void requestFail(E e);

}

4.presenter层接口

package com.example.wdshop.presents;

import java.util.Map;

public interface Ipresenter {

//post请求

void startRequest(String url, Map map, Class clazz);

//get请求

void getRequest(String url,Class clazz);

}

5.p层实现类

package com.example.wdshop.presents;

import com.example.wdshop.model.ModelImpl;

import com.example.wdshop.model.MyCallBack;

import com.example.wdshop.view.Iview;

import java.util.Map;

public class PresenterImpl implements Ipresenter {

private Iview mIview;

private ModelImpl model;

public PresenterImpl(Iview iview) {

mIview = iview;

model = new ModelImpl();

}

/**

* post

* */

@Override

public void startRequest(String url, Map map, Class clazz) {

model.requestData(url, map, clazz, new MyCallBack() {

@Override

public void onSuccess(Object data) {

mIview.requestData(data);

}

@Override

public void onFail(String error) {

mIview.requestFail(error);

}

});

}

/**

* get

* */

@Override

public void getRequest(String url, Class clazz) {

model.requestGet(url, clazz, new MyCallBack() {

@Override

public void onSuccess(Object data) {

mIview.requestData(data);

}

@Override

public void onFail(String error) {

mIview.requestFail(error);

}

});

}

public void onDetach(){

if (model!=null){

model = null;

}

if(mIview!=null){

mIview = null;

}

}

}

6.MyCallBack接口用于从m层向v层传数据

package com.example.wdshop.model;

public interface MyCallBack {

void onSuccess(E data);

void onFail(String error);

}

7.m层接口

package com.example.wdshop.model;

import java.util.Map;

public interface Imodel {

/**

* post

* */

void requestData(String url, Map map, Class clazz, MyCallBack myCallBack);

/**

* get

* */

void requestGet(String url,Class clazz, MyCallBack myCallBack);

}

8.m层实现类

package com.example.wdshop.model;

import com.example.wdshop.network.RetrofitManager;

import com.google.gson.Gson;

import java.util.Map;

public class ModelImpl implements Imodel {

private MyCallBack myCallBack;

/**

* post

* */

@Override

public void requestData(String url, final Map map, final Class clazz, final MyCallBack myCallBack) {

this.myCallBack = myCallBack;

RetrofitManager.getInstance().post(url,map,new RetrofitManager.HttpListener() {

@Override

public void onSuccess(String data) {

try {

Object o = new Gson().fromJson(data, clazz);

if(myCallBack!=null){

myCallBack.onSuccess(o);

}

}catch (Exception e){

e.printStackTrace();

if(myCallBack!=null){

myCallBack.onFail(e.getMessage());

}

}

}

@Override

public void onFail(String error) {

if(myCallBack!=null){

myCallBack.onFail(error);

}

}

});

}

/**

* get

* */

@Override

public void requestGet(String url, final Class clazz, final MyCallBack myCallBack) {

RetrofitManager.getInstance().get(url,new RetrofitManager.HttpListener() {

@Override

public void onSuccess(String data) {

try {

Object o = new Gson().fromJson(data, clazz);

if(myCallBack!=null){

myCallBack.onSuccess(o);

}

}catch (Exception e){

e.printStackTrace();

if(myCallBack!=null){

myCallBack.onFail(e.getMessage());

}

}

}

@Override

public void onFail(String error) {

if(myCallBack!=null){

myCallBack.onFail(error);

}

}

});

}

}

java okhttp3 工具类,Retrofit+okhttp+Rxjava网络请求工具类相关推荐

  1. Rxjava+retrofit+okHttp+mvp网络请求数据

    //Api类 public class Api {//http://api.svipmovie.com/front/columns/getVideoList.do?catalogId=40283481 ...

  2. java中使用okhttpsoap,Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    Retrofit介绍: Retrofit和okHttp师出同门,也是Square的开源库,它是一个类型安全的网络请求库,Retrofit简化了网络请求流程,基于OkHtttp做了封装,解耦的更彻底:比 ...

  3. Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架

    目录 1.什么是MVP? 2.什么是Retrofit? 3.RxJava 4.实践 之前公司的项目用到了MVP+Retrofit+RxJava的框架进行网络请求,所以今天特此写一篇文章以做总结.相信很 ...

  4. Retrofit+OKHttp+RxJava的使用

    什么是响应式编程   响应式编程是一种基于异步数据 流概念的编程模式.数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一 条流合并为一条新的流. 什么是RxJava RxJava ...

  5. android搭建网络框架,Android 搭建MVP+Retrofit+RxJava网络请求框架(三)

    上一篇中主要是将mvp+rxjava+retrofit进行了结合,本篇主要是对mvp框架的优化:建议先去看上一篇:Android 搭建MVP+Retrofit+RxJava网络请求框架(二) 针对vi ...

  6. Kotlin使用Coroutine+ViewModel+retrofit构建一个网络请求框架

    Kotlin使用Coroutine+ViewModel+retrofit构建一个网络请求框架 公司里的老代码用的网络请求框架技术都比较老,为了快速搭建一个网络请求框架,提高工作效率,记录一下用jetp ...

  7. 从源码处理一理Retrofit的异步网络请求如何把结果切换到主线程

    前提,需要具备的知识点是:动态代理,反射,注解. 场景:某日面试的时候被问道,Retrofit异步网络请求是怎么把结果返回给主线程的? 答曰:具体原理不是很清楚,最后应该是通过handler把结果发送 ...

  8. request 网络请求工具

    /*** request 网络请求工具* @Doc: https://github.com/umijs/umi-request*/ import { clearAuthority } from '@/ ...

  9. Okhttp网络请求工具介绍

    1.Okhttp请求流程: Okhttp内部的大致请求流程图如下所示: 使用方式: public class OkHttpUtils {private static String TAG = &quo ...

最新文章

  1. php mysql cms 商城,国内最常用的PHP+MySql免费CMS系统大全
  2. java中channelmessage,MessagePack在Netty中的应用
  3. Python continue
  4. python整商运算符_python中的运算符
  5. spring boot ---- jpa连接和操作mysql数据库
  6. log4j:WARN Please initialize the log4j system properly.解决方案
  7. TC软件概要设计文档(手机群控)
  8. Linux系统查看内存使用情况
  9. Access update语句 提示 操作必须使用一个可更新的查询
  10. Kelihos荣升恶意软件之王
  11. Java——事故应急
  12. 如何使用robots.txt及其详解
  13. IDEA全局替换快捷键
  14. 程序员微信名昵称_推荐几个高逼格的微信昵称?
  15. sd卡无法完成格式化解决办法
  16. 恭喜腾佑当选“河南省企业上云推进联盟”理事单位!
  17. 批量将jpg格式图像改为png格式
  18. MFC设置应用程序图标
  19. Android WebView 的回退方法(goback) 遭遇重定向
  20. LeetCode340:至多包含 K 个不同字符的最长子串(python)

热门文章

  1. 【华为云技术分享】Entity Framework Core 捕获数据库变动
  2. 【华为敏捷/DevOps实践】4. 如何从Excel做项目管理的方式中走出来
  3. php的floorval函数,php 取整函数(floor,ceil,round,intval)_PHP教程
  4. gui界面如何和内核链接 python_专栏 | 除了内核程序,Abaqus还能这样做二次开发...
  5. html 修改按回退键的url,location.hash保存页面状态的技巧
  6. Mac软件损坏,无法打开,允许任何来源后依旧损坏
  7. M1芯片Mac使用原生brew安装软件速度过慢的解决办法
  8. m1芯片macbook安装torch环境(采用conda-forge)
  9. Mac中使用LaTeX的中文字体出现Package fontspec Error: The font “宋体“ cannot be found.解决方案
  10. Python引用任意位置模块方法总结