失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java okhttp3 工具类 Retrofit+okhttp+Rxjava网络请求工具类

java okhttp3 工具类 Retrofit+okhttp+Rxjava网络请求工具类

时间:2022-02-26 03:48:56

相关推荐

java okhttp3 工具类 Retrofit+okhttp+Rxjava网络请求工具类

1.BaseApis接口封装请求方式

package com.work;

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.work;

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.work.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网络请求工具类》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。